TCP支持多个客户端通信

TCP支持多个客户端通信

引入多线程实现该功能。

服务端代码的更改:

public class ServerDemo {
    public static void main(String[] args) throws IOException {
        // 创建ServerSocket对象
        ServerSocket ss = new ServerSocket(10000);

		while(true) {
			// 调用accept等待客户端连接
	        Socket accept = ss.accept();
	        System.out.println("有人上线了:" + socket.getRemoteSocketAddress());
	        // 把这个客户端对应的socket通信管道,交给一个独立的线程负责
	        new ServerReaderThread(accept).start();
		}
    }
}

服务端读数据的多线程代码

public class ServerReaderThread extends Thread {
	private Socket socket;
	public ServerReaderThread(Socket socket) {
		this.socket = socket;
	}

	@Override
	public void run() {
		try {
			// 获取输入流对象
	        InputStream is = accept.getInputStream();
	
			// 把原始的字节输入流包装称数据输入流
			DataInputStream dis = new DataInputStream(is);
			while(true) {
				try {
				// 使用数据输入流读取客户端发送过来的消息
				String rs = dis.readUTF();
				System.out.println(rs);
				
		        // 获取客户端的IP地址
		        System.out.println(accept.getRemoteSocketAddress());
			} catch(Exception e) {
				System.out.println(socket.getRemoteSocketAddress() + "离线了");
				dis.close();
				socket.close();
				break;
			}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

客户端代码:TCP多收多发#^889e2d