套接字接受方法id就像true一样

时间:2013-04-07 11:24:50

标签: c# .net sockets networking

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被切换,即设置为false时,它不会进入其他部分,这是因为控件保持在接受状态 插座和即使是(TRUE)也没有执行其他部分。

plz指南??

1 个答案:

答案 0 :(得分:3)

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

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