Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 异步TCP服务器阻塞客户端_C#_Tcp - Fatal编程技术网

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

C# 异步TCP服务器阻塞客户端,c#,tcp,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

我用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); 
OnClient Connect是这样的

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分钟内正常工作。之后,它开始阻塞客户端。
有人能告诉我这可能有什么问题吗?

如果它在一段时间内工作正常,然后停止,我的主要猜测是您正在打开新的客户端套接字,需要查看代码以确保,完成后不要关闭它们

Windows相当合理地限制了您可以在给定端口上打开的套接字。如果您的应用程序在一段时间内打开了新的套接字,但没有关闭它们,那么您可以达到此限制,此时服务器将停止接受新连接。我过去也经历过类似的问题


您可以看一篇有趣的文章:

WaitForData是异步的吗?还是同步?问题中的信息太少,无法回答。WaitForData做什么?当新客户端无法再连接时,当前连接了多少个客户端?有多少客户端以前已连接,然后结束了会话?当客户端断开连接时,您是否正确地执行了优雅的关机?如何才能发现客户端是否断开连接?@PeterDuniho欢迎!假设你和我想的彼得·杜尼霍是同一个人:很高兴再次见到你;看起来microsoft.public.dotnet.languages.csharp终于干涸了。如果你不是我想的那个彼得·杜尼霍。。。哎呀@马歇尔:只有一个我也很高兴再次见到你。我仍然不知道如何利用这个网站。但我想这就是现在的一切,无论是好是坏。很高兴看到你、乔恩和其他人继续努力