2012-02-28 44 views
0

我有一个用C#编写的异步套接字服务器。通常,我的用户会抱怨说他们没有任何理由就会断开连接。用户计算机上的其他互联网应用程序(MSN,SKYPE等)似乎连接良好,因此它们的互联网连接似乎不成问题。任何人都可以提供一些关于如何在客户端和服务器之间建立连接的信息(我的意思是防止频繁断开连接),或者我可以在哪里查找断开连接问题?套接字连接稳定性

+0

请不要用“C#”等来标题。这就是标签的用途。 – 2012-02-28 05:01:15

+1

我很抱歉,但您希望我们怎么办?你的问题太笼统了。我们如何猜测所有可能的断开连接的变量?你能向我们提供你的代码吗?断开连接后重新连接怎么样? – Jason 2012-02-28 05:04:15

+0

你有特别的协议吗?它是否有某种ping/keep-alive机制?你的服务器可以处理请求的速度吗? – 2012-02-28 07:29:08

回答

0

我假设你在这里谈论TCP。您的应用程序的客户端使用的套接字库与他们用于连接到Skype或MSN的套接字库几乎相同。通常,断开连接的原因是一方关闭了套接字(例如连接空闲一段时间后)。检查代码中关闭连接的位置。

2

网络地址转换器(又名“家庭路由器”,“无线网关”等)在多台计算机中共享一个ISP分配的IP地址可能正在播放。 NAT保留一张活动连接表(有时称为“端口映射表”),用于跟踪如何为活动TCP连接和观察到的UDP会话翻译ip:port对。如果某些品牌的路由器在一段时间内未观察到任何通过TCP连接的流量,则已知可清除端口映射内存不足的品牌。像MSN Messenger和Skype这样的应用程序通过周期性地在客户端,服务器和其他持久连接之间发送“保持活跃”来缓解这种情况。这些消息是双向的。

你没有提供太多的信息继续下去,所以NAT问题只是一个可能性。

诊断连接失败的最佳方法是大量投入记录网络消息(客户端和服务器上),套接字事件以及套接字API的所有返回值。这样,如果客户报告问题,他可以将您的日志发送给您 - 并希望您可以获取相应的服务器日志以供比较。然后,您可以诊断断开连接的起始位置和/或哪个套接字错误重置连接。触发断开连接的代码有很大可能性。