Socket通信编程例子
来源:互联网 发布:淘宝客开源程序 编辑:程序博客网 时间:2024/05/18 01:40
- package com.test;
- import java.io.*;
- import java.net.ServerSocket;
- import java.net.Socket;
- public class TalkServer{
- public static void main(String[] args) {
- try {
- ServerSocket server=null;
- try {
- server=new ServerSocket(4700);
- // 创建一个ServerSocket在端口4700监听客户请求
- } catch (Exception e) {
- System.out.println("can not listen to:"+e);
- // 出错,打印出错信息
- }
- Socket socket=null;
- try {
- socket=server.accept();
- // 使用accept()阻塞等待客户请求,有客户
- // 请求到来则产生一个Socket对象,并继续执行
- } catch (Exception e) {
- System.out.println("Error."+e);
- // 出错,打印出错信息
- }
- String line;
- BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
- // 由Socket对象得到输入流,并构造相应的BufferedReader对象
- PrintWriter os=new PrintWriter(socket.getOutputStream());
- // 由Socket对象得到输出流,并构造PrintWriter对象
- BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
- // 由系统标准输入设备构造BufferedReader对象
- System.out.println("Client:"+is.readLine());
- // 在标准输出上打印从客户端读入的字符串
- line=sin.readLine();
- // 从标准输入读入一字符串
- while(!line.equals("bye")){
- // 如果该字符串为 "bye",则停止循环
- os.println(line);
- // 向客户端输出该字符串
- os.flush();
- // 刷新输出流,使Client马上收到该字符串
- System.out.println("Server:"+line);
- // 在系统标准输出上打印读入的字符串
- System.out.println("Client:"+is.readLine());
- // 从Client读入一字符串,并打印到标准输出上
- line=sin.readLine();
- // 从系统标准输入读入一字符串
- // 继续循环
- }
- os.close(); // 关闭Socket输出流
- is.close(); // 关闭Socket输入流
- socket.close(); // 关闭Socket
- server.close(); // 关闭ServerSocket
- } catch (Exception e) {
- System.out.println("Error:"+e);
- // 出错,打印出错信息
- }
- }
- }
2. 客户端程序
- package com.test;
- import java.io.*;
- import java.net.*;
- public class TalkClient {
- public static void main(String args[]) {
- try {
- Socket socket = new Socket("127.0.0.1", 4700);
- // 向本机的4700端口发出客户请求
- BufferedReader sin = new BufferedReader(new InputStreamReader(
- System.in));
- // 由系统标准输入设备构造BufferedReader对象
- PrintWriter os = new PrintWriter(socket.getOutputStream());
- // 由Socket对象得到输出流,并构造PrintWriter对象
- BufferedReader is = new BufferedReader(new InputStreamReader(socket
- .getInputStream()));
- // 由Socket对象得到输入流,并构造相应的BufferedReader对象
- String readline;
- readline = sin.readLine(); // 从系统标准输入读入一字符串
- while (!readline.equals("bye")) {
- // 若从标准输入读入的字符串为 "bye"则停止循环
- os.println(readline);
- // 将从系统标准输入读入的字符串输出到Server
- os.flush();
- // 刷新输出流,使Server马上收到该字符串
- System.out.println("Client:" + readline);
- // 在系统标准输出上打印读入的字符串
- System.out.println("Server:" + is.readLine());
- // 从Server读入一字符串,并打印到标准输出上
- readline = sin.readLine(); // 从系统标准输入读入一字符串
- } // 继续循环
- os.close(); // 关闭Socket输出流
- is.close(); // 关闭Socket输入流
- socket.close(); //关闭Socket
- } catch (Exception e) {
- System.out.println("Error" + e); //出错,则打印出错信息
- }
- }
- }
服务器端:ServerDemo.java
package com.lanber.socket;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerDemo {
/**
* 注意:Socket的发送与接收是需要同步进行的,即客户端发送一条信息,服务器必需先接收这条信息,
* 而后才可以向客户端发送信息,否则将会有运行时出错。
* @param args
*/
public static void main(String[] args) {
ServerSocket ss = null;
try {
ss = new ServerSocket(8888);
//服务器接收到客户端的数据后,创建与此客户端对话的Socket
Socket socket = ss.accept();
//用于向客户端发送数据的输出流
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
//用于接收客户端发来的数据的输入流
DataInputStream dis = new DataInputStream(socket.getInputStream());
System.out.println("服务器接收到客户端的连接请求:" + dis.readUTF());
//服务器向客户端发送连接成功确认信息
dos.writeUTF("接受连接请求,连接成功!");
//不需要继续使用此连接时,关闭连接
socket.close();
ss.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户端:ClientDemo.java
package com.lanber.socket;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class ClientDemo {
/**
* @param args
*/
public static void main(String[] args) {
Socket socket = null;
try {
socket = new Socket("localhost",8888);
//获取输出流,用于客户端向服务器端发送数据
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
//获取输入流,用于接收服务器端发送来的数据
DataInputStream dis = new DataInputStream(socket.getInputStream());
//客户端向服务器端发送数据
dos.writeUTF("我是客户端,请求连接!");
//打印出从服务器端接收到的数据
System.out.println(dis.readUTF());
//不需要继续使用此连接时,记得关闭哦
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
- Socket通信编程例子
- socket通信简单例子
- android socket 通信例子
- Android Socket通信例子
- Socket网络通信例子
- Socket通信简单例子
- socket通信代码例子
- Linux下socket编程实现客户机服务器通信的例子
- Linux下socket编程实现客户机服务器通信的例子
- java socket 简单通信例子
- 一个Socket通信小例子
- Java Socket多线程通信例子
- Socket之UDP通信例子
- Socket和ServerSocket通信例子
- raw socket编程例子
- socket编程代码例子
- raw socket编程例子
- raw socket编程例子
- android:configChanges属性
- PHP开发规范
- Ext JS中Ext.grid.Panel或Ext.data.Store中遮罩效果去除
- Java中Runnable和Thread的区别
- NOIP2009提高组《潜伏者》解题报告
- Socket通信编程例子
- 开源混淆工具ProGuard配置详解及配置实例
- 内核态和用户态
- TCP的流量控制和拥塞控制
- jquery 无限循环滚动,文字图片皆可,IE6,7,8,FF8测试无误
- fork()和多线程
- Leetcode: Binary Tree Level Order Traversal II
- UPnP
- 六款常用的linux C/C++ IDE