Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
De UdpClient klasse communiceert met netwerkservices met behulp van UDP. De eigenschappen en methoden van de UdpClient klasse abstraheren de details van het maken van een Socket voor het aanvragen en ontvangen van gegevens met behulp van UDP.
User Datagram Protocol (UDP) is een eenvoudig protocol dat het best doet om gegevens te leveren aan een externe host. Omdat het UDP-protocol echter een verbindingsloos protocol is, zijn UDP-gegevensgrammen die naar het externe eindpunt worden verzonden, niet gegarandeerd binnen te komen, evenmin zijn ze gegarandeerd in dezelfde volgorde waarin ze worden verzonden. Toepassingen die gebruikmaken van UDP moeten worden voorbereid op het verwerken van ontbrekende, dubbele en out-of-sequence gegevensgrammen.
Als u een datagram wilt verzenden met behulp van UDP, moet u het netwerkadres weten van het netwerkapparaat dat als host fungeert voor de service die u nodig hebt en het UDP-poortnummer dat de service gebruikt om te communiceren. De Internet Assigned Numbers Authority (IANA) definieert poortnummers voor algemene services (zie register van servicenaam en transportprotocolpoortnummer). Services die niet op de IANA-lijst staan, kunnen poortnummers hebben in het bereik van 1024 tot 65.535.
Speciale netwerkadressen worden gebruikt ter ondersteuning van UDP-broadcastberichten op IP-netwerken. In de volgende discussie wordt de IP-adresfamilie van versie 4 gebruikt die op internet wordt gebruikt als voorbeeld.
IP-versie 4-adressen gebruiken 32 bits om een netwerkadres op te geven. Voor klasse C-adressen die een netmasker van 255.255.255.0 gebruiken, worden deze bits gescheiden in vier octetten. Wanneer ze worden uitgedrukt in decimalen, vormen de vier octetten de bekende gestippelde-quad-notatie, zoals 192.168.100.2. De eerste twee octetten (192.168 in dit voorbeeld) vormen het netwerknummer, het derde octet (100) definieert het subnet en de laatste octet (2) is de host-id.
Als u alle bits van een IP-adres instelt op één of 255.255.255.255, vormt dit het beperkte broadcast-adres. Als u een UDP-datagram naar dit adres verzendt, wordt het bericht bezorgd bij elke host in het lokale netwerksegment. Omdat routers nooit berichten die naar dit adres worden gestuurd doorzenden, ontvangen alleen hosts op het netwerksegment het broadcastbericht.
Broadcasts kunnen worden omgeleid naar specifieke delen van een netwerk door alle bits van de host-id in te stellen. Gebruik bijvoorbeeld het adres 192.168.1.255 om een uitzending te verzenden naar alle hosts in het netwerk die beginnen met 192.168.1.255.
In het volgende codevoorbeeld wordt gebruikgemaakt van een UdpClient om te luisteren naar UDP-gegevensgrammen op poort 11.000. De client ontvangt een berichttekenreeks en schrijft het bericht naar de console.
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();
}
}
In het volgende codevoorbeeld worden UDP-gegevensgrammen verzonden naar het specifieke broadcastadres 192.168.1.255, via poort 11.000. De client verzendt de berichtreeks die is opgegeven op de opdrachtregel.
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");
}
}