我正在为一些简单的代码而苦苦挣扎。但是,我无法完成它。我有这个服务器,它必须接受来自多个客户端的连接(显然是异步的)。所以我有:
IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Any, 8082);
TcpListener tcpListener = new TcpListener(IPAddress.Any, 8082);
server = tcpListener.Server;
server.Bind(ipEndPoint);
server.Listen(4);
server.BeginAccept(new AsyncCallback(beginConnection), server);
和,
static void beginConnection(IAsyncResult iar)
{
Console.WriteLine("Client connected");
Socket s = (Socket)iar.AsyncState;
server = s.EndAccept(iar);
server.Listen(4);
server.BeginAccept(beginConnection, s);
}
然后,当我尝试连接自己时,第一个客户端工作正常。它只是向该服务器发送一条消息,然后服务器将其发送回客户端。服务器充当回声。但是当我尝试连接其他客户端时它不起作用。我也放了 Console.WriteLine("Client connected"),但是服务器什么也没写。我该如何解决这个问题?
我想我没有将正确的参数传递给第一个 BeginAccept 方法。我应该传递 tcpListener,而不是服务器套接字。
然后我会有:
static void beginConnection(IAsyncResult iar)
{
Console.WriteLine("Client connected");
TcpListener tcpListener = (TcpListener)iar.AsyncState;
Socket s = tcpListener.Server.EndAccept(iar);
tcpListener.Server = s; // But I would have this error
server.Listen(2);
server.BeginAccept(beginConnection, s);
}
但是我会遇到我标记它的错误。在第一个版本中没有任何修改,所以我认为这是代码的第一个版本中的问题。