如果服务端需要处理很多个客户端的消息通信请求应该如何处理呢,此时我们就需要在服务端引入线程了,也就是说客户端每发起一个请求,服务端就创建一个新的线程来处理这个客户端的请求,这样就实现了一个客户端一个线程的模型
服务端
服务端线程类
客户端
public class ServerThread extends Thread{
private Socket socket;
public ServerThread(Socket socket){
this.socket = socket;
}
@Override
public void run() {
try {
//从socket中得到字节输入流
InputStream is = socket.getInputStream();
//使用缓冲字符输入流包装字节输入流
BufferedReader bfr = new BufferedReader(new InputStreamReader(is));
String msg;
while ((msg = bfr.readLine())!=null){
System.out.println(msg);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
public class Server {
public static void main(String[] args) {
try {
//注册接口
ServerSocket ss = new ServerSocket(8686);
//定义死循环持续接收客户端的消息
while (true){
Socket socket = ss.accept();
//创建线程类处理socket通讯信息
new ServerThread(socket).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
public class Client {
public static void main(String[] args) {
try {
//请求与服务端创建连接
Socket socket = new Socket("127.0.0.1",8686);
//获取socket输出流包装成打印流
OutputStream os = socket.getOutputStream();
PrintStream ps = new PrintStream(os);
//利用循环不断的发消息给服务端
Scanner sc = new Scanner(System.in);
while (true){
System.out.print("请输入发送内如:");
String msg = sc.nextLine();
ps.println(msg);
ps.flush();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
创建多个客户端向服务端发送请求,服务端都成功将其打印
