次の方法で共有


同期サーバー ソケットの使用

同期サーバー ソケットでは、ソケット上で接続要求が受信されるまでアプリケーションの実行が中断されます。同期サーバー ソケットは、操作を実行するためにネットワークを頻繁に使用するアプリケーションには適しませんが、簡単なネットワーク アプリケーションには適しています。

Bind メソッドと Listen メソッドを使用して、エンドポイントでリッスンするように設定された Socket は、Accept メソッドを使用して、着信した接続要求の受け入れができるようになります。Accept メソッドが呼び出されると、接続要求が受信されるまでアプリケーションは中断されます。

接続要求が受信されると、Accept は、接続しようとしているクライアントに関連付けられた Socket の新しいインスタンスを返します。クライアントからデータを読み取ってコンソールに表示し、そのデータをクライアントにエコー バックするコード例を次に示します。この Socket ではメッセージング プロトコルが指定されていないため、"<EOF>" という文字列がメッセージ データの末尾を示します。この例は、listener という名前の Socket が既に初期化され、エンドポイントに関連付けられていることを前提としています。

Console.WriteLine("Waiting for a connection...")
Dim handler As Socket = listener.Accept()
Dim data As String = Nothing
            
While True
    bytes = New Byte(1024) {}
    Dim bytesRec As Integer = handler.Receive(bytes)
    data += Encoding.ASCII.GetString(bytes, 0, bytesRec)
    If data.IndexOf("<EOF>") > - 1 Then
        Exit While
    End If
End While
            
Console.WriteLine("Text received : {0}", data)

Dim msg As Byte() = Encoding.ASCII.GetBytes(data)
handler.Send(msg)
handler.Shutdown(SocketShutdown.Both)
handler.Close()
Console.WriteLine("Waiting for a connection...");
Socket handler = listener.Accept();
String data = null;

while (true) {
    bytes = new byte[1024];
    int bytesRec = handler.Receive(bytes);
    data += Encoding.ASCII.GetString(bytes,0,bytesRec);
    if (data.IndexOf("<EOF>") > -1) {
        break;
    }
}

Console.WriteLine( "Text received : {0}", data);

byte[] msg = Encoding.ASCII.GetBytes(data);
handler.Send(msg);
handler.Shutdown(SocketShutdown.Both);
handler.Close();

参照

概念

非同期サーバー ソケットの使用
同期サーバー ソケットの例
ソケットを使用したリッスン