如果服务端需要处理很多个客户端的消息通信请求应该如何处理呢,此时我们就需要在服务端引入线程了,也就是说客户端每发起一个请求,服务端就创建一个新的线程来处理这个客户端的请求,这样就实现了一个客户端一个线程的模型
服务端
服务端线程类
客户端
public class ServerThread extends Thread{private Socket socket;public ServerThread(Socket socket){this.socket = socket;}@Overridepublic 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();}}
}
创建多个客户端向服务端发送请求,服务端都成功将其打印

上一篇:你说的虐待是什么意思