应用多线程来实现服务器与多客户端之间的通信
1.基于TCP协议的Socket实现
工具类
public class ThreadUtils extends Thread{
private Socket socket = null;
public ThreadUtils (Socket socket){//创建构造方法
this.socket = socket;
}
public void run() {
InputStream is = null;
InputStreamReader isr = null;
BufferedReader bf = null;
try {
is = socket.getInputStream(); //获得字节输入流
isr = new InputStreamReader(is);//将字节输入流转为 字符输入流
bf = new BufferedReader(isr); //将字符输入流加入缓冲区
String data = null;//返回的数据
while (bf.readLine()!=null){
data = bf.readLine(); //读取数据
}
socket.shutdownInput();//关闭输入流
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
if(bf!=null)
bf.close();
if(isr!=null)
isr.close();
if(is!=null)
is.close();
if(socket!=null)
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Action类
2.基于UDP协议的Socket实现
UDP协议(用户数据包协议)是无连接、不可靠、无序的。
速度相对而言比较快,进行传输的时候,首先会将要传输的数据定义成数据报(Datagram),在数据报中指明数据所要达到的Socket(主机地址和端口号),然后再将数据报发送出去。
相关操作类:
1.DatagramPacket :表示数据报包
2.DatagramSocket: 进行端到端通信的类
具体的实现
如果想要响应客户端 , 则可以调用DatagramPacket.getInetAddress(); 这个方法拿到客户端的Inetaddress实例
在发送数据报回去
传输一个对象可以使用ObjectOutputStream