码迷,mamicode.com
首页 > 其他好文 > 详细

Socket通信

时间:2015-07-17 15:31:16      阅读:96      评论:0      收藏:0      [点我收藏+]

标签:

Java提供的网络功能有四大类:
1、InetAddress:用于标识网络上的硬件资源
2、URL:统一资源定位符 通过URL可以直接读取或写入网络上的数据
3、Sockets:使用TCP协议实现网络通信的Socket相关的类
4、Datagram:使用UDP协议,将数据保存在数据报中,通过网络进行通信

 

Socket通信实现步骤
1、创建ServerSocket和Socket
2、打开链接到Socket的输入/输出流
3、按照协议对Socket进行读/写操作
4、关闭输入输出流、关闭Socket

 

服务器与客户端通信示例(单个客户端):

服务端:

//1、创建一个服务端Socket,即ServerSocket,并指定绑定的端口,并监听此端口
ServerSocket serverSocket = new ServerSocket(8888);
//2、调用accept()方法开始监听,等待客户端的连接
Socket socket = serverSocket.accept();
//3、获取输入流,读取客户端信息
InputStream in = socket.getInputStream();

InputStreamReader isr = new InputStreamReader(in);
BufferedReader bufr = new BufferedReader(isr);
String str = null;
while((str = bufr.readline())!=null){
  System.out.println(str);
}
socket.shutdownInput();// 关闭输入流
//4、关闭资源
bufr.close();
isr.close();
in.close();
socket.close();
serverSocket.close();

客户端:

//1、创建客户端Socket,指定服务器地址和端口
Socket socket = new Socket("localhost",8888);
//2、获取输出流,向服务端发送信息
OutputStream out = socket.getOutputStream;
PrintWriter pw = new PrintWriter(out);
pw.write("我是客户端");
pw.flush();
socket.shutdownOutput();// 关闭输出流
//3.关闭资源
pw.close();
out.close();
socket.close();

 

应用多线程来实现服务器与多客户端之间的通信
基本步骤
1、服务器端创建ServerSocket,循环调用accept()等待客户端连接
2、客户端创建一个socket并请求和服务器端连接
3、服务器端接收客户端请求,创建socket与该客户端建立专线连接
4、建立连接的两个socket在一个单独的线程上对话
5、服务器端继续等待新的连接

 

UDP编程

DatagramPacket:表示数据报包

DatagramSocket:进行端到端通信的类


服务器端实现步骤:

1、创建DatagramSocket,指定端口号

2、创建DatagramPacket

3、接收客户端发送的数据信息

4、读取数据


客户端实现步骤:

1、定义发送信息

2、创建DatagramPacket,包含将要发送的信息

3、创建DatagramSocket,

4、发送数据

 

总结:
1、多线程的优先级
为设置优先级可能会导致运行时速度非常慢,科降低优先级
2、是否关闭输出流和输入流
对于同一个socket,如果关闭了输出流,则与该输出流关联的socket也会被关闭,所以一般不用关闭流,直接关闭socket即可
3、使用TCP通信传输对象(序列化和反序列化)
4、socket编程传递文件

Socket通信

标签:

原文地址:http://www.cnblogs.com/linjian/p/4654406.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!