Socket を利用した通信で UDP 送受信 を行う サンプルコード を掲載します。
ここでは UDP通信 でも UdpClient クラス を用いた 同期処理 および 非同期処理 の サンプルコード を掲載します。
目次
UDP 同期 送受信
UDP 同期 通信 は UDP 通信 の基本操作になります。
非同期化したければ、このメソッドごと Task.Factory.StartNew してしまうのも方法だと思います。
…途中で停止させる実装は別途必要ですが。。
UDP 同期 受信 (サーバー)
UdpClient クラス を利用して、 同期 で メッセージを受信する サンプルコード を掲載します。
同期処理なので重たい処理 (11行目 Receive メソッド) で処理が止まったような挙動になることに注意します。
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 メソッド を呼ぶ必要はありません。
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 クラス を利用して、 非同期 で メッセージを受信する サンプルコード を掲載します。
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 クラス を利用して、 非同期 で メッセージを送信する サンプルコード を掲載します。
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 の フォロー」 お願いします!!