AcceptSocket 超时?

Bit*_*lue 5 c# sockets

是否可以AcceptSocketTcpListener超时的对象上进行一次中断?

TcpListener server = new TcpListener(localIP, port);
server.Start();
while (!shuttingDown)
    try
    {
        Socket client = server.AcceptSocket();
        if (client != null)
        {
            // do client stuff
        }
    }
    catch { }
Run Code Online (Sandbox Code Playgroud)

尝试 BeginAccept 和 EndAccept:如果 3 秒内没有客户端,我该如何结束接受?(我试图在这里近似解决方案)

server.BeginAcceptTcpClient(new AsyncCallback(DoAcceptTcpClientCallback), server);
Thread.Sleep(3000);
server.EndAcceptTcpClient(???);
Run Code Online (Sandbox Code Playgroud)

Bit*_*lue 0

此代码检查是否有新客户端建立连接。若有则AcceptSocket()谓之。唯一的问题是服务器必须经常检查以快速响应客户端。

TcpListener server = new TcpListener(localIP, port);
server.Start();
while (!shuttingDown)
{
    if (server.Pending())
    {
        Socket client = server.AcceptSocket();
        if (client != null)
        {
            // do client stuff
        }
    }
    else
        Thread.Sleep(1000);
}
Run Code Online (Sandbox Code Playgroud)

  • 如果我知道我的网络请求因为这个解决方案而被卡住了一秒钟,我会很生气。 (5认同)