套接字编程c#窗口应用程序

套接字编程c#窗口应用程序,c#,winforms,C#,Winforms,我创建了一个小应用程序,它将数据从客户端记录到服务器。我想获取客户端应用程序从task messenger退出应用程序时的状态。如何获取客户状态 就像在skype中一样 I用户退出skype form task messenger另一用户的skype shows已注销此用户。您可以让客户端定期发送小的心跳。如果这些心跳停止,您就知道客户端已关闭(进程已终止、应用程序已关闭、计算机已关闭、网络连接已断开等等)。您不能捕获SocketException并检查是否接收到零字节吗。如果接收到零字节,则另

我创建了一个小应用程序,它将数据从客户端记录到服务器。我想获取客户端应用程序从task messenger退出应用程序时的状态。如何获取客户状态

就像在skype中一样


I用户退出skype form task messenger另一用户的skype shows已注销此用户。

您可以让客户端定期发送小的心跳。如果这些心跳停止,您就知道客户端已关闭(进程已终止、应用程序已关闭、计算机已关闭、网络连接已断开等等)。

您不能捕获SocketException并检查是否接收到零字节吗。如果接收到零字节,则另一端会干净地关闭连接。如果在SocketErrorCode设置为ConnectionReset的情况下得到SocketException,则还可以假定另一端已消失。你唯一不会接受的是半开放的连接。为此,您将需要安德烈亚斯建议的某种“保持活力”的包装。

谢谢安德烈亚斯!我也有同样的想法。另一个应用程序正在使用所有客户端IP ping,如果有任何请求发出,它将保持超时。有没有最快的方法,使它不会降低应用程序和服务器的性能。这是一个难题!我只能在心跳期间警告数据库连接。确保您没有锁定整个表,避免陷入死锁,等等。我自己通过套接字编程实现了这一点。正如在simple chat application.SocketException中一样,它非常不可靠,您只能在发送到客户端时获得它,而您通常不会这样做(服务器只响应客户端请求)。您不想保持连接处于打开状态,因为您只能有这么多并发连接have@Andreas. 一点也不。我在socket.Receive()方法中得到了很多。此外,在某些协议中,客户机或服务器都可以启动保持活动的数据包。如果请求以异步方式响应,服务器将启动通信;在异常情况下处理双连接计算机。无论如何,谢谢你的评论。