Socket を利用した通信で UDP 送受信 を行う サンプルコード を掲載します。
Socket 通信 でも 正統派 コード、ここでは UDP通信 でも Socket クラス
を用いた 同期処理 および 非同期処理 の サンプルコード を掲載します。
目次
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 25 26 27 | public void ListenMessage() { // 接続ソケットの準備 var socket = new Socket(SocketType.Dgram, ProtocolType.Udp); var local = new IPEndPoint(IPAddress.Any, 8000); var remote = new IPEndPoint(IPAddress.Any, 8000) as EndPoint; socket.Bind(local); while ( true ) { var buffer = new byte [1024]; // 受信待機 var length = socket.ReceiveFrom(buffer, ref remote); // 受信したデータを変換 var data = Encoding.UTF8.GetString(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 17 18 19 20 21 22 23 | public void SendMessage() { // 送信元の作成 // ※設定しなくても良いが…ポート指定するときは必要 var local = new IPEndPoint ( IPAddress.Parse( "192.168.0.2" ), 8000); // 宛先の作成 var remote = new IPEndPoint ( IPAddress.Parse( "192.168.0.100" ), 8000); // メッセージの準備 var message = Encoding.UTF8.GetBytes( "Hello world !" ); // UDPでメッセージ送信 var socket = new Socket(SocketType.Dgram, ProtocolType.Udp); socket.Bind(local); // ローカルアドレス、ポート番号を指定。 socket.SendTo(message, remote); // 同期処理で送信。送信し終わるまで処理が止まる。 socket.Shutdown(SocketShutdown.Both); socket.Close(); } |
UDP 非同期 送受信
UDP 非同期 受信 (サーバー)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | public void ListenMessage() { // 接続先、接続元情報 var local = new IPEndPoint(IPAddress.Any, 8000); var remote = new IPEndPoint(IPAddress.Any, 8000) as EndPoint; // 接続ソケットの準備 var socket = new Socket(SocketType.Dgram, ProtocolType.Udp); socket.Bind(local); // 受信イベントデータを生成 var e = new SocketAsyncEventArgs(); e.RemoteEndPoint = remote; e.SetBuffer(0, 1024); e.Completed += this .OnReceiveCompleted; // 受信待機 socket.ReceiveFromAsync(e); } private void OnReceiveCompleted( object sender, SocketAsyncEventArgs e) { // 受信したデータを変換 var data = Encoding.UTF8.GetString(e.Buffer); // 受信した処理 // ... // 再度受信ループへ this .ListenMessage(); } |
UDP 非同期 送信 (クライアント)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | public void SendMessage() { // 送信元の作成 // ※設定しなくても良いが…ポート指定するときは必要 var local = new IPEndPoint( IPAddress.Parse( "192.168.86.1" ), 8000); // 宛先の作成 var remote = new IPEndPoint( IPAddress.Parse( "192.168.86.113" ), 8000); // メッセージの準備 var message = Encoding.UTF8.GetBytes( "Hello world !" ); // 送信イベントデータ var e = new SocketAsyncEventArgs(); e.RemoteEndPoint = remote; e.SetBuffer(message, 0, message.Length); // UDP送信 var socket = new Socket(SocketType.Dgram, ProtocolType.Udp); socket.Bind(local); // ローカルアドレス、ポート番号を指定。 socket.SendToAsync(e); // 同期処理で送信。送信し終わるまで処理が止まる。 socket.Shutdown(SocketShutdown.Both); socket.Close(); } |
最後に… このブログに興味を持っていただけた方は、 ぜひ 「Facebookページ に いいね!」または 「Twitter の フォロー」 お願いします!!