Socket を利用した通信で UDP 送受信 を行う サンプルコード を掲載します。
Socket 通信 でも 正統派 コード、ここでは UDP通信 でも Socket クラス
を用いた 同期処理 および 非同期処理 の サンプルコード を掲載します。
目次
UDP 同期 送受信
UDP 同期 受信 (サーバー)
正統派はこちらの実装なんでしょうか…
ただただ面倒な実装なので、個人的には UdpClient
の方が好みです。
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
の方が好みです。
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 非同期 受信 (サーバー)
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 非同期 送信 (クライアント)
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 の フォロー」 お願いします!!