DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

DOBON.NET

UDPによりデータの送受信を行う

.NET FrameworkでUDPを扱うには、UdpClientクラスを使用すると便利です。

UDP(User Datagram Protocol)はTCPのように接続の確立の必要がなく、相手にデータを一方的に送りつけます。そのため、サーバーも必要ありません。(UDPに関して詳しくは、「アスキー デジタル用語辞典 - UDP」等をご覧ください。)

UdpClientクラスでは、データの受信をReceiveメソッドで、送信をSendメソッドで行います。

以下にUdpClientクラスを使ってデータを送受信するサンプル(コンソールアプリケーション)を示します。データを送信した後、送られてきたデータを受信しています。自分自身に送信し、受信しているため、実用性はありません。

[VB.NET]
Imports System

Public Class Class1
    Shared Sub Main()
        '文字コードを指定する
        Dim enc As System.Text.Encoding = System.Text.Encoding.UTF8

        'データを送信するリモートホストとポート番号
        Dim remoteHost As String = "localhost"
        Dim remotePort As Integer = 2002
        'バインドするローカルポート番号
        Dim localPort As Integer = 2002

        'ローカルポート番号localPortにバインドする
        Dim udp As New System.Net.Sockets.UdpClient(localPort)

        '送信するデータを読み込む
        Dim sendMsg As String = Console.ReadLine()
        Dim sendBytes As Byte() = enc.GetBytes(sendMsg)
        'リモートホストを指定してデータを送信する
        udp.Send(sendBytes, sendBytes.Length, remoteHost, remotePort)

        'データを受信する
        Dim remoteEP As System.Net.IPEndPoint = Nothing
        Dim rcvBytes As Byte() = udp.Receive(remoteEP)
        Dim rcvMsg As String = enc.GetString(rcvBytes)
        Console.WriteLine("受信したデータ:{0}", rcvMsg)
        Console.WriteLine("送信元アドレス:{0}/ポート番号:{1}", _
            remoteEP.Address, remoteEP.Port)

        'UDP接続を終了
        udp.Close()

        Console.ReadLine()
    End Sub
End Class
[C#]
using System;

public class Class1
{
    static void Main()
    {
        //文字コードを指定する
        System.Text.Encoding enc = System.Text.Encoding.UTF8;

        //データを送信するリモートホストとポート番号
        string remoteHost = "localhost";
        int remotePort = 2002;
        //バインドするローカルポート番号
        int localPort = 2002;

        //ローカルポート番号localPortにバインドする
        System.Net.Sockets.UdpClient udp =
            new System.Net.Sockets.UdpClient(localPort);

        //送信するデータを読み込む
        string sendMsg = Console.ReadLine();
        byte[] sendBytes = enc.GetBytes(sendMsg);
        //リモートホストを指定してデータを送信する
        udp.Send(sendBytes, sendBytes.Length,
            remoteHost, remotePort);

        //データを受信する
        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);

        //UDP接続を終了
        udp.Close();
        
        Console.ReadLine();
    }
}

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • このサイトで紹介されているコードの多くは、例外処理が省略されています。例外処理については、こちらをご覧ください。