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

ここで2行目は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に設定された場合、else部分には入りません。これは、コントロールがソケットのAccepting状態のままであり、その間(TRUE)であっても他の部分を実行しないためです。

ガイドをお願いします??

4

1 に答える 1

3

AcceptSocketこれは、着信接続を受け入れることができるまで実行スレッドをブロックすることを意味するブロッキング メソッド呼び出しです。リスナーとの接続が確立されていない場合、呼び出しは無期限にブロックされ続けます。

たとえば、リスナーを停止するか、非ブロッキングBeginAcceptSocketまたはAcceptSocketAsyncメソッドを使用して非同期的に接続を受け入れるように切り替える必要があります。

于 2013-04-07T12:08:33.770 に答える