UdpClient クラスは、UDP を使用してネットワーク サービスと通信します。 UdpClient クラスのプロパティとメソッドは、UDP を使用してデータを要求および受信するためのSocketの作成の詳細を抽象化します。
ユーザー データグラム プロトコル (UDP) は、リモート ホストにデータを配信するためのベスト エフォートを行う単純なプロトコルです。 ただし、UDP プロトコルはコネクションレス プロトコルであるため、リモート エンドポイントに送信される UDP データグラムが到着する保証も、送信されるのと同じシーケンスで到着することが保証されるわけではありません。 UDP を使用するアプリケーションは、欠落しているデータグラム、重複データ、およびシーケンス外のデータグラムを処理するように準備する必要があります。
UDP を使用してデータグラムを送信するには、必要なサービスをホストしているネットワーク デバイスのネットワーク アドレスと、サービスが通信に使用する UDP ポート番号を知っている必要があります。 インターネット割り当て番号機関 (IANA) は、共通サービスのポート番号を定義します ( サービス名とトランスポート プロトコルのポート番号レジストリを参照)。 IANA リストにないサービスは、1,024 ~ 65,535 の範囲のポート番号を持つことができます。
特殊なネットワーク アドレスは、IP ベースのネットワーク上の UDP ブロードキャスト メッセージをサポートするために使用されます。 次の説明では、インターネットで使用される IP バージョン 4 アドレス ファミリを例として使用します。
IP バージョン 4 のアドレスでは、32 ビットを使用してネットワーク アドレスを指定します。 255.255.255.0 のネットマスクを使用するクラス C アドレスの場合、これらのビットは 4 オクテットに分割されます。 10 進数で表すと、4 オクテットは、192.168.100.2 などの使い慣れたドット四角形表記を形成します。 最初の 2 オクテット (この例では 192.168) はネットワーク番号を形成し、3 番目のオクテット (100) はサブネットを定義し、最後のオクテット (2) はホスト識別子です。
IP アドレスのすべてのビットを 1 つ (255.255.255.255) に設定すると、制限付きブロードキャスト アドレスが形成されます。 このアドレスに UDP データグラムを送信すると、ローカル ネットワーク セグメント上の任意のホストにメッセージが配信されます。 ルーターはこのアドレスに送信されたメッセージを転送しないため、ネットワーク セグメント上のホストのみがブロードキャスト メッセージを受信します。
ブロードキャストは、ホスト識別子のすべてのビットを設定することで、ネットワークの特定の部分に送信できます。 たとえば、192.168.1 以降の IP アドレスで識別されるネットワーク上のすべてのホストにブロードキャストを送信するには、アドレス 192.168.1.255 を使用します。
次のコード例では、 UdpClient を使用して、ポート 11,000 で UDP データグラムをリッスンします。 クライアントはメッセージ文字列を受け取り、コンソールにメッセージを書き込みます。
Imports System.Net
Imports System.Net.Sockets
Imports System.Text
Public Class UDPListener
Private Const listenPort As Integer = 11000
Private Shared Sub StartListener()
Dim listener As New UdpClient(listenPort)
Dim groupEP As New IPEndPoint(IPAddress.Any, listenPort)
Try
While True
Console.WriteLine("Waiting for broadcast")
Dim bytes As Byte() = listener.Receive(groupEP)
Console.WriteLine("Received broadcast from {0} :", groupEP)
Console.WriteLine(Encoding.ASCII.GetString(bytes, 0, bytes.Length))
End While
Catch e As SocketException
Console.WriteLine(e)
Finally
listener.Close()
End Try
End Sub 'StartListener
Public Shared Sub Main()
StartListener()
End Sub 'Main
End Class 'UDPListener
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
public class UDPListener
{
private const int listenPort = 11000;
private static void StartListener()
{
UdpClient listener = new UdpClient(listenPort);
IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, listenPort);
try
{
while (true)
{
Console.WriteLine("Waiting for broadcast");
byte[] bytes = listener.Receive(ref groupEP);
Console.WriteLine($"Received broadcast from {groupEP} :");
Console.WriteLine($" {Encoding.ASCII.GetString(bytes, 0, bytes.Length)}");
}
}
catch (SocketException e)
{
Console.WriteLine(e);
}
finally
{
listener.Close();
}
}
public static void Main()
{
StartListener();
}
}
次のコード例では、 Socket を使用して、ポート 11,000 を使用して、ダイレクト ブロードキャスト アドレス 192.168.1.255 に UDP データグラムを送信します。 クライアントは、コマンド ラインで指定されたメッセージ文字列を送信します。
Imports System.Net
Imports System.Net.Sockets
Imports System.Text
Public Class Program
Public Shared Sub Main(args() As [String])
Dim s As New Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)
s.EnableBroadcast = True
Dim broadcast As IPAddress = IPAddress.Parse("192.168.1.255")
Dim sendbuf As Byte() = Encoding.ASCII.GetBytes(args(0))
Dim ep As New IPEndPoint(broadcast, 11000)
s.SendTo(sendbuf, ep)
Console.WriteLine("Message sent to the broadcast address")
End Sub 'Main
End Class
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
class Program
{
static void Main(string[] args)
{
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
s.EnableBroadcast = true;
IPAddress broadcast = IPAddress.Parse("192.168.1.255");
byte[] sendbuf = Encoding.ASCII.GetBytes(args[0]);
IPEndPoint ep = new IPEndPoint(broadcast, 11000);
s.SendTo(sendbuf, ep);
Console.WriteLine("Message sent to the broadcast address");
}
}
こちらも参照ください
.NET