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