我有一个用C#编写的异步套接字服务器。我的用户经常抱怨他们无缘无故地与断开了连接。用户计算机上的其他互联网应用程序(MSN、SKYPE等)看起来连接良好,因此这似乎不是他们的互联网连接的问题。谁能提供一些关于如何使客户端和服务器之间的连接坚如磐石(我的意思是防止频繁断开)的信息,或者我可以在哪里寻找断开问题?
发布于 2012-02-28 15:55:00
网络地址转换器(也称为“家庭路由器”、“无线网关”等)在多台计算机之间共享ISP分配IP地址可能在这里起作用。NAT保留一个活动连接表(有时称为“端口映射表”),跟踪如何为活动TCP连接和观察到的UDP会话转换ip:port对。有些品牌的路由器如果在一段时间内没有观察到任何通过TCP连接的流量,则会清除内存中的端口映射。像MSN Messenger和Skype这样的应用程序通过定期在客户端、服务器和其他持久连接之间发送"keep alive“来缓解这种情况。这些消息是双向传递的。
您没有提供太多信息,因此NAT问题只是众多可能性中的一种。
诊断连接故障的最佳方法是投入大量资金记录网络消息(在客户端和服务器上)、套接字事件以及套接字API的所有返回值。这样,如果客户报告了问题,他可以将他的日志发送给您-希望您可以获取相应的服务器日志进行比较。然后,您可以诊断断开的原因和/或重置连接的套接字错误。您的代码中有很大可能触发了断开连接。
发布于 2012-02-28 14:36:50
我假设您在这里谈论的是TCP。您的应用程序的客户端使用的套接字库与他们用来连接Skype或MSN的套接字库几乎相同。通常,断开连接的原因是其中一方关闭了套接字(例如,在连接空闲了一段时间之后)。检查代码中关闭连接的位置。
https://stackoverflow.com/questions/9476632
复制相似问题