c#异步TCP服务器阻塞客户端

时间:2014-10-16 07:24:39

标签: c# tcp

我在c#中开发了一个异步TCP服务器。代码就像这样

m_mainSocket = new Socket(AddressFamily.InterNetwork,
    SocketType.Stream,
    ProtocolType.Tcp);

IPEndPoint ipLocal = new IPEndPoint(IPAddress.Any, portno);

m_mainSocket.Blocking = false;

m_mainSocket.Bind(ipLocal);

m_mainSocket.Listen(5000);

m_mainSocket.BeginAccept(new AsyncCallback(OnClientConnect), null); 

OnclienetConnect就是这样,

deviceSocket soc = new deviceSocket();
soc.bytecount = 0;
soc.socket = m_mainSocket.EndAccept(asyn);
m_mainSocket.BeginAccept(new AsyncCallback(OnClientConnect), null);

m_workerSocket.Add(soc);              

WaitForData(m_workerSocket[m_workerSocket.Count - 1].socket);

它可以正常工作一段时间(最多30-40分钟)。之后它开始阻止客户端。 任何人都能说出这可能是什么问题吗?

1 个答案:

答案 0 :(得分:0)

如果它运行正常一段时间,然后停止,我的主要猜测是你打开新的客户端套接字(需要查看你的代码以确保),而不是在你关注它们时关闭它们。重做。

Windows(非常合理地)具有您可以在给定端口上打开的套接字的限制。如果您的应用程序随着时间的推移打开新的套接字,并且没有关闭它们,您可以达到此限制,此时服务器将停止接受新连接。我过去经历过类似的问题。

以下是您可以查看的有趣文章:http://www.codeproject.com/Articles/83102/C-SocketAsyncEventArgs-High-Performance-Socket-Cod