ちょっと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で実行)とも通信できた
■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に全部書いてある。受信を別スレッドにしてある。