ちょっとUDPを使ってアプリを作る用事があるので、まずは.NETのSystem.Net.Sockets.UdpClientクラスでシンプルなテキストチャットを作ってみた。相手のIPアドレスとポートを指定してメッセージ(文字列)を送り、受信側はポートを開けてさえいればメッセージが読める。
UDPによりデータの送受信を行う: .NET Tips: C#, VB.NET, Visual Studioを参考にした。


学部の頃にインターネット概論という授業で、

  • コンジェスチョンコントロールがない
  • フローコントロールがない
とか習って、「ふーん」という感じだったけど。セッションを張らずに送信できて、受信するかは受信側の自由なんだな。


■ソースコード
shokai / C# UDP Sample / source — bitbucket.org
(VisualStudio2008pro C#で作成)


別ホスト(VMWare上のUbuntuでmonoで実行)とも通信できた
UDPの勉強



■UdpClientの使い方
まず必要な物読み込んで

using System.Net;
using System.Net.Sockets;


UdpClientオブジェクトを作ってportを開く。

UdpClient client = new UdpClient(6000); // 受信port
client.DontFragment = true;
client.EnableBroadcast = true;

これですでに受信できるようになっている。


相手のIPアドレスかホスト名とportを指定して、UTF8エンコードで送信

Encoding encoding = Encoding.UTF8;
byte[] sendBytes = encoding.GetBytes("送信する文字列");
client.Send(sendBytes, sendBytes.Length, "192.168.0.15", 6000);



受信バッファから読み出すと、文字列と受信元IPとportがわかる。

if (client.Available > 0)
{
  byte[] recvByte = client.Receive(ref remoteEP);
  Console.WriteLine("receive: " + encoding.GetString(recvByte) +
            " (form" + remoteEP.Address + ":" + remoteEP.Port+")");
}



最後にUdpClientを閉じるのを忘れないように

client.Close();


チャットアプリの実際の処理はUDPClientSampleForm.csに全部書いてある。受信を別スレッドにしてある。