2

このマイクロソフト非同期サーバーサーバーソケットの例を読んでいますhttp://msdn.microsoft.com/en-gb/library/fx6588te.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1

        // Bind the listener socket object to the local endpoint and
        // listen for incoming connections.
        try {
            listener.Bind(localEndPoint); 
            listener.Listen(100);

        while (true) {
            // Set the event to nonsignaled state.
            allDone.Reset(); //allDone is a ManualResetEvent

            // Start an asynchronous socket to listen for connections.
            Console.WriteLine("Waiting for a connection...");
            listener.BeginAccept( 
                new AsyncCallback(AcceptCallback),
                listener );

            // Wait until a connection is made before continuing.
            allDone.WaitOne();
        }

質問1:

新しいクライアントソケットがサーバーソケットに加わると、サーバーはクライアントごとに新しいスレッドを開始し、私が理解しているように、各サーバースレッドには独自のポート番号があります。その場合、新しいクライアントはどのポートに接続するかをどのように知るのですか?サーバーのIPアドレスは同じですが、新しいクライアントごとにポートを変更する必要があります。しかし、Microsoftコードは、それぞれの非同期クライアントの例(上のページの下部)ではそのようなことをしていません

質問2:

最後の行、つまりallDone.WaitOne();を使用しない場合はどうなりますか。新しいスレッドが作成されて新しいクライアントをリッスンするときに、クレイジーな無限ループが作成されますか?

お時間をいただきありがとうございます。同じことを別の言葉で2回言ったので、答えを少し詳しく説明していただければ幸いです。

4

1 に答える 1