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

本文关键字:消息 异步 客户端 TCP | 更新日期: 2023-09-27 18:07:33

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

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

如果您使用一台机器作为所有100_000个客户机的主机,那么它们使用的端口超过了系统上可用的65_535个(实际上更少)端口。系统资源已用完

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