12.3 实现参考1(服务器端并发连接多个客户端)

12.3 实现参考1(服务器端并发连接多个客户端)

服务器端和每个客户端之间的通信应该是彼此独立的、并发进行的。在服务器端,和每个客户端的通信就是一道单独的线程,如图2.12.2所示。

图2.12.2 服务器端并发与多个客户端连接的示意图

Server类负责绑定端口,启动监听,在接收到客户端的连接请求并成功连接后,就为当前的客户端创建一道新的线程,将当前的socket对象传入该线程,由此线程去负责服务器端和该客户端的通信,见代码12.3的第12行。

【代码12.3】Server类

代码12.3和12.4

每当服务器端和一个客户端建立网络连接时,就创建一个新的线程类Server Thread的对象,并将socket传入线程对象。有关客户端和服务器端通信的内容都移入线程类Server Thread的run()方法中,见代码12.4。

【代码12.4】新增加的Server Thread线程类

原版本中的客户端程序Login类、Login Face类、Talk Face类不变。

当前,可以同时启动多个客户端,每个客户端都可单独向服务器端发送信息,服务器端都可以输出在控制台上。

这样,服务器端的main线程负责监听客户端的连接请求,并建立网络连接。每当服务器端连上一个客户端时,就启动一个单独的线程,负责服务器端与这个客户端的通信。