Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Třída UdpClient komunikuje se síťovými službami pomocí UDP. Vlastnosti a metody třídy UdpClient abstrahují podrobnosti vytvoření Socket pro účely vyžádání a příjmu dat pomocí UDP.
Protokol UDP (User Datagram Protocol) je jednoduchý protokol, který se snaží poskytovat data vzdálenému hostiteli. Vzhledem k tomu, že je protokol UDP bez připojení, nejsou zaručeny doručení datovýchgramů UDP do vzdáleného koncového bodu ani zaručeny doručení ve stejném pořadí, ve kterém se odesílají. Aplikace, které používají UDP, musí být připravené ke zpracování chybějících, duplicitních a zastaralých datovýchgramů.
Pokud chcete odeslat datagram pomocí protokolu UDP, musíte znát síťovou adresu síťového zařízení, které je hostitelem služby, kterou potřebujete, a číslo portu UDP, které služba používá ke komunikaci. Úřad IANA (Internet Assigned Numbers Authority) definuje čísla portů pro běžné služby (viz Registr čísel portů protokolu a názvu služby). Služby, které nejsou v seznamu IANA, mohou mít čísla portů v rozsahu 1 024 až 65 535.
Speciální síťové adresy se používají k podpoře zpráv všesměrového vysílání UDP v sítích založených na IP adresách. Následující diskuze používá jako příklad řadu IP adres verze 4 používanou na internetu.
Adresy IP verze 4 používají k zadání síťové adresy 32 bitů. Pro adresy třídy C používající masku 255.255.255.0 jsou tyto bity odděleny do čtyř oktetů. Když je vyjádřeno v desítkové soustavě, čtyři oktety tvoří známý tečkovaný čtyřkvadrant, například 192.168.100.2. První dvě oktety (192.168 v tomto příkladu) tvoří síťové číslo, třetí oktetát (100) definuje podsíť a poslední oktet (2) je identifikátor hostitele.
Nastavení všech bitů IP adresy na jednu nebo 255.255.255.255, tvoří omezenou adresu vysílání. Odeslání datagramu UDP na tuto adresu doručí zprávu libovolnému hostiteli v segmentu místní sítě. Vzhledem k tomu, že směrovače nikdy nepřeposílají zprávy odeslané na tuto adresu, přijímají vysílací zprávu pouze hostitelé v segmentu sítě.
Vysílání lze směrovat na konkrétní části sítě nastavením všech bitů hostitelského identifikátoru. Pokud chcete například odeslat všesměrové vysílání všem hostitelům v síti identifikované IP adresami počínaje 192.168.1, použijte adresu 192.168.1.255.
Následující příklad kódu používá UdpClient k naslouchání datagramům UDP na portu 11 000. Klient obdrží řetězec zprávy a zapíše zprávu do konzoly.
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();
}
}
Následující příklad kódu používá Socket k odeslání datovýchgramů UDP na adresu řízeného vysílání 192.168.1.255 pomocí portu 11 000. Klient odešle řetězec zprávy zadaný na příkazovém řádku.
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");
}
}