异步向多个tcp客户端发送消息

时间:2015-08-12 12:24:18

标签: c# sockets asynchronous tcp

我有一个服务器程序接受大约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);
}

1 个答案:

答案 0 :(得分:0)

如果您使用单台计算机作为所有100_000客户端的主机,那么它们使用的系统超过了65_535(实际上更少)端口。您的系统资源不足。

连接由4个变量标识:src ip,src port,dst ip,dst ports。在我描述的情况下,你的src端口用完了。