C# 插座连接稳定性

C# 插座连接稳定性,c#,performance,sockets,asynchronous,C#,Performance,Sockets,Asynchronous,我有一个用C#编写的异步套接字服务器。我的用户经常抱怨他们无缘无故地断开了与的连接。用户计算机上的其他互联网应用程序(MSN、SKYPE等)似乎连接良好,因此他们的互联网连接似乎没有问题。有谁能提供一些关于如何使客户端和服务器之间的连接坚如磐石的信息(我的意思是防止频繁断开连接)或者我可以在哪里查找断开连接问题的信息吗?我想你在这里谈论的是TCP。应用程序客户端使用的套接字库与他们用于连接Skype或MSN的套接字库几乎相同。通常,断开连接的原因是一方关闭插座(例如,在连接空闲一段时间后)。检查

我有一个用C#编写的异步套接字服务器。我的用户经常抱怨他们无缘无故地断开了与的连接。用户计算机上的其他互联网应用程序(MSN、SKYPE等)似乎连接良好,因此他们的互联网连接似乎没有问题。有谁能提供一些关于如何使客户端和服务器之间的连接坚如磐石的信息(我的意思是防止频繁断开连接)或者我可以在哪里查找断开连接问题的信息吗?

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

在多台计算机之间共享ISP分配的IP地址的网络地址转换器(也称为“家庭路由器”、“无线网关”等)可能在这里起作用。NAT保留一个活动连接表(有时称为“端口映射表”),用于跟踪如何转换活动TCP连接和观察到的UDP会话的ip:port对。有一些知名品牌的路由器,如果在一段时间内没有观察到任何通过TCP连接的流量,就会清除内存中的端口映射。MSN Messenger和Skype等应用通过定期在客户端、服务器和其他持久连接之间发送“保持活动”来缓解这一问题。这些信息是双向的

你没有提供太多的信息,所以NAT问题只是众多可能性中的一种


诊断连接故障的最佳方法是大力记录网络消息(客户端和服务器上)、套接字事件以及套接字API的所有返回值。这样,如果客户报告问题,他可以向您发送他的日志,希望您可以获取相应的服务器日志进行比较。然后,您可以诊断断开连接的来源和/或重置连接时发生的套接字错误。您的代码中很可能有什么东西触发了断开连接。

请不要在标题前加上“C#”之类的前缀。这就是标签的作用。对不起,你希望我们做什么?你的问题太笼统了。我们如何猜测断开连接的所有可能变量?你能给我们提供你的代码吗?断开连接后重新连接怎么样?有特殊协议吗?它是否有某种ping/keep-alive机制?您的服务器能够足够快地处理请求吗?