我试图在C#中创建一个聊天应用程序。作为经典的客户端 - 服务器模型,当服务器套接字接受新客户端时,将使用“客户端处理程序”角色启动新线程。我的问题是,当按钮点击关闭服务器时,是否有正确的方法来终止这些“客户端处理程序”线程?
提前致谢。
答案 0 :(得分:0)
据我所知,正确的方法是在每个客户端套接字上调用socket.Shutdown(SocketShutdown.Send);
。这将发送任何剩余数据并通知客户您正在关闭。客户端应响应关闭其发送通道,使您收到0字节的消息。此时,您可以关闭套接字。
我几乎没有看到任何人使用Shutdown
方法,也没有等待来自客户端的断开响应(0字节),可能是因为当其中一个客户端没有响应关闭时它会延迟关闭。
有关详细信息,请参阅Winsock FAQ - 不是.NET资源,但Socket
类并不是那么远。