2013-04-07 40 views
1
TcpListener tcpserver; 
Socket serverSocket = tcpserver.AcceptSocket(); 

下面第二行是像while(true)我的意思是,直到它的任何客户端被连接到TCP服务器 它不会执行它下面的任何行。插座接受方式ID一样,而真正的

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

我写这篇文章的代码:

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

当我运行了一次,客户端得到连接。但是当admin_flag被触发即设置为false,它不是在其他部分去,这是因为控制仍然接受插座&的状态 不执行其他部分即使是它,而(TRUE)。

PLZ指南??

回答

3

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

你将不得不例如或者停止监听或切换到异步使用非阻塞BeginAcceptSocketAcceptSocketAsync方法接受连接。

+0

怎么做?进出口新的C# – 2013-04-07 12:35:49

+0

任何链接分享...... – 2013-04-08 07:38:17

+0

这里说明了如何使用它的一个例子,http://msdn.microsoft.com/en-us/library/bew39x2a.aspx和http://msdn.microsoft .COM/EN-US /库/ fx6588te.aspx。 – 2013-04-08 08:48:33