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