服务器设计以多线程方式工作,以接受多个客户端的算数运算请求。
q 建立一个用于接受客户端请求线程,等待客户端的连接。
q 为每一个接受的客户端都建立一个接收数据线程和一个发送数据线程。当接收线程收到数据后,先计算算数表达式的结果,然后使用事件通知发送数据线程。发送数据接收到事件后,将计算结果发送数据给客户端。
q 建立一个资源清理线程,用于及时对服务器的资源进行清理。当客户端的套接字关闭之后,需要清理为该客户端创建的线程和分配的内存空间。
q 服务器的主线程用于接收用户的输入和显示信息。
q 服务器仅显示启动和退出的界面。在子线程中完成对客户端数据的处理,不在服务器界面上显示客户端的数据。
q 所有子线程都必须自动退出,不调用线程结束函数。在所有子线程都退出后,主线程最后退出。
1.服务器启动
如图5.5所示,服务器启动时的线程时序图。服务器启动时,创建清理资源线程和接受客户端请求线程。当接受客户端请求线程收到一个客户端的请求后,为该客户端创建一个接收数据线程和一个发送数据线程。
2.服务器退出
当关闭服务器时,服务器向清理资源线程和接受客户端请求接程,发送线程退出信号。接受客户端请求线程自动退出。
清理资源线程向所有正在于客户端进行通讯的接收和发送数据线程,发送服务器退出消息,使这些线程自动退出。当这些线程退出后,清理资源线程再向主线程发送消息,然后该线程退出。主线程在接收到清理资源线程发送的消息后,最后退出。
3.客户端退出
如图所示,服务器在某个客户端结束请求时的线程时序图。当接收数据线程获知客户端结束请求时,向该线程的发送数据线程发送消息使其退出,然后该线程退出线程。同时清理资源线程清理该线程的占用资源。