Socket を利用した通信で UDP 送受信 を行う サンプルコード を掲載します。
ここでは UDP通信 でも UdpClient クラス
を用いた 同期処理 および 非同期処理 の サンプルコード を掲載します。
目次
UDP 同期 送受信
UDP 同期 通信 は UDP 通信 の基本操作になります。
非同期化したければ、このメソッドごと Task.Factory.StartNew
してしまうのも方法だと思います。
…途中で停止させる実装は別途必要ですが。。
UDP 同期 受信 (サーバー)
UdpClient クラス
を利用して、 同期 で メッセージを受信する サンプルコード を掲載します。
同期処理なので重たい処理 (11行目 Receive メソッド
) で処理が止まったような挙動になることに注意します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | public void ListenMessage() { // 接続ソケットの準備 var local = new IPEndPoint(IPAddress.Any, 8000); var remote = new IPEndPoint(IPAddress.Any, 8000); var client = new UdpClient(local); while ( true ) { // データ受信待機 var buffer = client.Receive( ref remote); // 受信したデータを変換 var data = Encoding.UTF8.GetString(buffer); // Receive イベント を実行 this .OnRecieve(data); } } private void OnRecieve( string data) { // 受信したときの処理 } |
UDP 同期 送信 (クライアント)
UdpClient クラス
を利用して、 同期 で メッセージを送信する サンプルコード を掲載します。
同期処理なので重たい処理 (14行目 Send メソッド
) で処理がとまったような挙動になることに注意します。
UDP は コネクションレス なので、事前に接続先と接続を確立する必要はありませんが…
Send メソッド
の引数に接続先を指定しない場合、事前に Connect メソッド
を呼ぶ必要があります。
逆に、Send メソッド
の引数に接続先を指定する場合、Connect メソッド
を呼ぶ必要はありません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | public void SendMessage() { // 宛先の作成 var remote = new IPEndPoint( IPAddress.Parse( "192.168.0.100" ), 8000); // メッセージの準備 var message = Encoding.UTF8.GetBytes( "Hello world !" ); // UDPでメッセージ送信 var client = new UdpClient(8000); // ローカルポート番号を指定。 client.Connect(remote); // 接続先を設定。 client.Send(message, message.Length); // 同期処理なので、送信し終わるまで処理が止まる。 client.Close(); } |
UDP 非同期 送受信
UDP 非同期 受信 (サーバー)
UdpClient クラス
を利用して、 非同期 で メッセージを受信する サンプルコード を掲載します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | public async void ListenMessage() { // 接続ソケットの準備 var local = new IPEndPoint(IPAddress.Any, 8000); var remote = new IPEndPoint(IPAddress.Any, 8000); var client = new UdpClient(local); while ( true ) { // データ受信待機 var result = await client.ReceiveAsync(); // 受信したデータを変換 var data = Encoding.UTF8.GetString(result.Buffer); // Receive イベント を実行 this .OnRecieve(data); } } private void OnRecieve( string data) { // 受信したときの処理 } |
UDP 非同期 送信 (クライアント)
UdpClient クラス
を利用して、 非同期 で メッセージを送信する サンプルコード を掲載します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | public async void SendMessage() { // 宛先の作成 var remote = new IPEndPoint( IPAddress.Parse( "192.168.0.10" ), 8000); // メッセージの準備 var message = Encoding.UTF8.GetBytes( "Hello world !" ); // UDPでメッセージ送信 var client = new UdpClient(8000); client.Connect(remote); await client.SendAsync(message, message.Length); client.Close(); } |
参考記事
最後に… このブログに興味を持っていただけた方は、 ぜひ 「Facebookページ に いいね!」または 「Twitter の フォロー」 お願いします!!