我有一个用C#编写的异步套接字服务器。通常,我的用户抱怨他们没有任何理由断开连接。用户计算机上的其他互联网应用程序(MSN,SKYPE等)似乎连接良好,因此它们的互联网连接似乎不是问题。任何人都可以提供一些有关如何在客户端和服务器之间建立连接的信息(我的意思是防止频繁断开连接)或者我可以查找断开连接的问题吗?
答案 0 :(得分:2)
在多个计算机之间共享ISP分配的IP地址的网络地址转换器(也称为“家庭路由器”,“无线网关”等)可以在这里发挥作用。 NAT保留一个活动连接表(有时称为“端口映射表”),用于跟踪如何转换活动TCP连接和观察到的UDP会话的ip:端口对。如果某些品牌的路由器在一段时间内没有观察到通过TCP连接的任何流量,则可以清除端口映射内存。像MSN Messenger和Skype这样的应用程序通过在客户端,服务器和其他持久连接之间定期发送“保持活动”来缓解这种情况。这些消息都是双向的。
你没有提供太多信息,所以NAT问题只是其中一种可能性。
诊断连接失败的最佳方法是大量投资记录网络消息(包括客户端和服务器),套接字事件以及来自套接字API的所有返回值。这样,如果客户报告问题,他可以向您发送他的日志 - 并且希望您可以获取相应的服务器日志以进行比较。然后,您可以诊断断开连接的位置和/或重置连接的套接字错误。代码中的某些内容很可能会触发断开连接。
答案 1 :(得分:0)
我假设你在这里谈论TCP。应用程序客户端使用的套接字库与用于连接Skype或MSN的套接字库几乎相同。通常断开连接的原因是其中一方关闭套接字(例如,在连接空闲一段时间后)。检查代码中关闭连接的位置。