网络通信基础第二式——创建循环等待的多线程服务器
想必你已经浏览过我的前一篇博文《网络通信基础第一式——创建简单服务器》,并发现了这个简单的服务器的诸多bug。例如:其中有一个极大的缺陷,当一个客户机连接上来后,收到服务器发出的一条消息,按照程序的执行顺序,服务器程序就退出了,如此不稳定的服务器如何让用户信任?当这个问题解决之后,你又会发现新的问题,当用两个telnet客户端连接服务器时,只有一个可以通信,前一个退出后,后一个才能通信,这个也是很致命的问题。一个服务器怎么只能让一个客户机接入呢?实在是太浪费了。。。
下面,我们就一一解决上诉问题。
首先,我们先解决服务器不稳定的问题。通过将ServerSocket的accep()在一个循环中调用,实现服务器的循环等待。即当一个客户机通信完毕后,服务器就在此进入循环中,重新调用accep()方法等待下一个客户机的接入,代码示例如下:
注:如果你要控制服务器的启动和停止,硬编码while的条件为true可不是个好主意,后面会慢慢完善!
随后,我们将要解决下一个问题,即让多个客户机接入服务器。我们将进入服务器的每一个连接对象(Socket)交由一个线程对象去处理,随后而来的其他连接就不用再等待了。将服务器改造为多线程服务器模型,示意图如下:
代码示例如下:
现在的服务器已经可以同时处理多个客户机的连接请求啦,可以说已经完成了一个服务器的雏形,后面就是不断地完善过程啦!敬请期待。。。
谢谢夸奖!