C#でUDPで一対一でチャットのようなこと。
学生と一緒にやったので、備忘録。
UDPによりデータの送受信を行う@dobon.net 参照。
PC 2つ使って送信受信するには送信と受信とそれぞれ別のループに入れないといけない。 つまりマルチスレッド。 なので【連載 】C#プログラミング入門 第7回:マルチスレッドプログラミングなど参考にややいじった。
using System;
using System.Threading;
public class Class1
{
static System.Net.Sockets.UdpClient udp;
static System.Text.Encoding enc;
static void Main()
{
//文字コードを指定する
enc = System.Text.Encoding.UTF8;
//データを送信するリモートホストとポート番号
string remoteHost = "172.25.14.160";
int remotePort = 2002;
//バインドするローカルポート番号
int localPort = 2002;
//ローカルポート番号localPortにバインドする
udp = new System.Net.Sockets.UdpClient(localPort);
string sendMsg = "";
Thread threadA = new Thread(new ThreadStart(ThreadMethod));
threadA.Start();
while(true)
{
//送信するデータを読み込む
sendMsg = Console.ReadLine();
if ("End" == sendMsg) break;
byte[] sendBytes = enc.GetBytes(sendMsg);
//リモートホストを指定してデータを送信する
udp.Send(sendBytes, sendBytes.Length,
remoteHost, remotePort);
}
//UDP接続を終了
udp.Close();
Console.ReadLine();
}
private static void ThreadMethod()
{
while(true)
{
//データを受信する
System.Net.IPEndPoint remoteEP = null;
byte[] rcvBytes = udp.Receive(ref remoteEP);
string rcvMsg = enc.GetString(rcvBytes);
Console.WriteLine("受信したデータ:{0}", rcvMsg);
Console.WriteLine("送信元アドレス:{0}/ポート番号:{1}",
remoteEP.Address, remoteEP.Port);
}
}
}
ソースぐちゃぐちゃ。 清書してないけどだいたいわかるでしょう。