0
TcpListener tcpserver;
Socket serverSocket = tcpserver.AcceptSocket(); 

这里的第二行就像while(true)我的意思是,在任何客户端连接到 tcp 服务器之前,它不会执行它下面的任何行。

我的问题是:我想通过这个 tcpserver 接受多个客户端,但是基于一个标志,if admin_flag is TRUE然后接受连接,否则不会。这个标志将随时由不同的线程切换。

我写了这段代码:

while (true)
{
    if(admin_flag==true)
    {
        Socket serverSocket = tcpserver.AcceptSocket(); 
    }
    else
    // do something...
}

当我运行一次时,客户端已连接。但是当admin_flag被切换即设置为假时,它不会进入其他部分,这是因为控件保持在套接字的接受状态并且即使它在(真)时也不执行其他部分。

请指导?

4

1 回答 1

3

AcceptSocket是一个阻塞方法调用,这意味着它将阻塞执行线程,直到它可以接受传入的连接。如果没有与您的侦听器建立连接,则呼叫将继续无限期阻塞。

例如,您必须停止侦听器或切换到使用非阻塞BeginAcceptSocketAcceptSocketAsync方法异步接受连接。

于 2013-04-07T12:08:33.770 回答