類別 UdpClient 會使用UDP與網路服務通訊。 UdpClient 類別的屬性和方法抽象化創建 Socket 以使用 UDP 來要求和接收數據的細節。
用戶數據報通訊協定 (UDP) 是簡單的通訊協定,可盡最大努力將數據傳遞至遠端主機。 不過,由於 UDP 通訊協定是無連線通訊協定,傳送至遠端端端點的 UDP 數據報不保證會到達,也不保證會以傳送的相同順序抵達。 使用 UDP 的應用程式必須準備好處理遺漏、重複和順序外的數據報。
若要使用 UDP 傳送數據報,您必須知道裝載所需服務之網路裝置的網路位址,以及服務用來通訊的 UDP 連接埠號碼。 因特網指派號碼授權單位 (IANA) 會定義一般服務的埠號碼(請參閱 服務名稱和傳輸通訊協定埠號碼登錄)。 不在 IANA 清單中的服務可以在 1,024 到 65,535 的範圍內擁有埠號碼。
特殊網路位址可用來支援IP型網路上的UDP廣播訊息。 下列討論會使用因特網上使用的IP第4版位址系列作為範例。
IP 第 4 版位址使用 32 位來指定網路位址。 針對使用 255.255.255.0 的類別 C 位址,這些位元會分成四個字節。 以十進位表示時,四個八位組成的位元組形成熟悉的點分十進位格式,例如 192.168.100.2。 前兩個八位 (在此範例中為 192.168) 形成網路號碼,第三個八位 (100) 會定義子網,而最後八位 (2) 則是主機標識符。
將IP位址的所有位設定為一個或255.255.255.255,會形成有限的廣播位址。 將 UDP 數據報傳送至此位址會將訊息傳遞至局域網路區段上的任何主機。 因為路由器永遠不會轉送發送到此位址的訊息,所以只有位於網路區段的主機會收到這個廣播訊息。
廣播可以透過設定主機識別碼的所有位元,將廣播傳送到網路的特定部分。 例如,若要將廣播傳送至IP位址從192.168.1開始識別之網路上的所有主機,請使用位址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 將 UDP 數據報傳送至導向廣播位址 192.168.1.255,使用埠 11,000。 用戶端會傳送命令行上指定的訊息字串。
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");
}
}