同期クライアント ソケットでは、ネットワーク操作が完了するまでアプリケーション プログラムが中断されます。同期ソケットは、操作を実行するためにネットワークを頻繁に使用するアプリケーションには適しませんが、そうではないアプリケーションの場合は、ソケットを使用することによってネットワーク サービスに簡単にアクセスできるようになります。
データを送信するには、バイト配列を Socket クラスのデータ送信メソッドのいずれか (Send または SendTo) に渡します。Encoding.ASCII プロパティを使用して文字列をバイト配列バッファにエンコードしてから、Send メソッドを使用してそのバッファをネットワーク デバイスに送信する例を次に示します。Send メソッドは、ネットワーク デバイスに送信したバイト数を返します。
Dim msg As Byte() = _
System.Text.Encoding.ASCII.GetBytes("This is a test.")
Dim bytesSent As Integer = s.Send(msg)
byte[] msg = System.Text.Encoding.ASCII.GetBytes("This is a test");
int bytesSent = s.Send(msg);
Send メソッドは、送信するバイトをバッファから削除し、ネットワーク デバイスに送るために、そのバイトをネットワーク インターフェイスのキューに配置します。ネットワーク インターフェイスではデータがすぐには送信されない場合がありますが、Shutdown メソッドを使用して接続が正常に閉じられていれば、そのデータも最終的には送信されます。
ネットワーク デバイスからデータを受信するには、バッファを Socket クラスのデータ受信メソッドの 1 つ (Receive または ReceiveFrom) に渡します。同期ソケットでは、ネットワーク経由でバイトが受信されるまで、またはソケットが閉じられるまで、アプリケーションが中断されます。ネットワークからデータを受信してコンソールに表示する例を次に示します。この例は、ネットワークから着信したデータが ASCII でエンコードされたテキストであることを前提にしています。Receive メソッドは、ネットワークから受信したバイト数を返します。
Dim bytes(1024) As Byte
Dim bytesRec = s.Receive(bytes)
Console.WriteLine("Echoed text = {0}", _
System.Text.Encoding.ASCII.GetString(bytes, 0, bytesRec))
byte[] bytes = new byte[1024];
int bytesRec = s.Receive(bytes);
Console.WriteLine("Echoed text = {0}",
System.Text.Encoding.ASCII.GetString(bytes, 0, bytesRec));
ソケットが不要になったら、Shutdown メソッドを呼び出し、次に Close メソッドを呼び出して、そのソケットを解放する必要があります。Socket を解放する例を次に示します。SocketShutdown 列挙体は、ソケットを送信時または受信時のいずれかに閉じるのか、またはその両方に閉じるかを示す定数を定義します。
s.Shutdown(SocketShutdown.Both)
s.Close()
s.Shutdown(SocketShutdown.Both);
s.Close();