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指南??
答案 0 :(得分:3)
AcceptSocket
是一个阻塞方法调用,这意味着它将阻止执行线程,直到它可以接受传入连接。如果没有与您的侦听器建立连接,则呼叫将继续无限期阻止。
您必须使用非阻塞BeginAcceptSocket
或AcceptSocketAsync
方法停止侦听器或切换为异步接受连接。