1

これが私のリスニング機能と接続機能

Socket Listen

public void Listen(){
IPEndPoint ep = new IPEndPoint(IPAddress.Any, PortNumber);
Listen.Bind(ep);
Listen.Listen(10);
Listen.BeginAccept(new AsyncCallback(NewConnection), null);}

public void NewConnection(IAsyncResult asyn)
{
    Socket Accepted = Listen.EndAccept(asyn);
    Listen.BeginAccept(new AsyncCallback(NewConnection), null);
    SomeFunction(Accepted);
}

コードは正常に動作し、問題はありません。コードをトレースして、さまざまなクライアントでの作業方法を確認し、フローを理解しました。ただし、1 つのソケットが異なるクライアントにサービスを提供する方法がわかりません。ソケットを介してクライアント間で時分割多重化しますか?

私のコードでは、確立された接続にのみ使用でき、それ以上は使用できないことをMSDNで読みましたAccepted-その部分はわかりません。クライアントがサーバーソケットに接続しようとすると、実際には何が起こるでしょうか? EndAccept接続を確立し、同じソケットでリッスンし続けて、より多くのリクエストを同時に受け入れるために、異なるポートを持つまったく異なるソケットを返しますか?

4

1 に答える 1

1

私の理解に基づいて、あなたが言ったことは基本的に正しいです。Acceptedソケットは と同じではありませんListen。その後、リッスン ソケットを使用EndAcceptして別のBeginAccept非同期呼び出しを開始し、新しく作成したソケットを使用してリモート ピアと通信できます。

確認するには、リッスン ソケットのローカル ポートと接続されているソケットを確認します。それらは異なるはずです。

于 2012-12-17T17:02:28.650 に答える