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);
             }
         } 
}

ソースぐちゃぐちゃ。 清書してないけどだいたいわかるでしょう。