我有一个服务器程序接受大约100000个tcp客户端并使用异步套接字编程向它们发送数据。将数据发送到客户端我使用for循环调用每个客户端的BeginSend。 问题是,当我开始向客户端发送数据时,新的客户端无法连接到服务器,直到发送完成。 任何人都可以帮我解决这个问题吗?
//This is the Loop that calls Send Method
foreach (ClientInfo item in followers)
{
Socketing.Send(item.state, JSONData);
}
public static void Send(StateObject state, String data)
{
byte[] byteData = Encoding.UTF8.GetBytes(data);
state.workSocket.BeginSend(byteData, 0, byteData.Length, 0, new AsyncCallback(SendCallback), state);
}
private static void SendCallback(IAsyncResult ar)
{
StateObject state = (StateObject)ar.AsyncState;
Socket socket = state.workSocket;
int bytesSent = socket.EndSend(ar);
}
答案 0 :(得分:0)
如果您使用单台计算机作为所有100_000客户端的主机,那么它们使用的系统超过了65_535(实际上更少)端口。您的系统资源不足。
连接由4个变量标识:src ip,src port,dst ip,dst ports。在我描述的情况下,你的src端口用完了。