Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
La UdpClient classe comunica con i servizi di rete tramite UDP. Le proprietà e i metodi della UdpClient classe astraggono i dettagli della creazione di un Socket oggetto per la richiesta e la ricezione di dati tramite UDP.
Il protocollo UDP (User Datagram Protocol) è un protocollo semplice che consente di distribuire i dati a un host remoto. Tuttavia, poiché il protocollo UDP è un protocollo senza connessione, gli datagrammi UDP inviati all'endpoint remoto non sono garantiti per l'arrivo, né sono garantiti che arrivino nella stessa sequenza in cui vengono inviati. Le applicazioni che usano UDP devono essere preparate a gestire datagrammi mancanti, duplicati e fuori ordine.
Per inviare un datagramma tramite UDP, è necessario conoscere l'indirizzo di rete del dispositivo di rete che ospita il servizio necessario e il numero di porta UDP usato dal servizio per comunicare. Internet Assigned Numbers Authority (IANA) definisce i numeri di porta per i servizi comuni (vedere Service Name and Transport Protocol Port Number Registry). I servizi non presenti nell'elenco IANA possono avere numeri di porta compresi tra 1.024 e 65.535.
Gli indirizzi di rete speciali vengono usati per supportare i messaggi di trasmissione UDP nelle reti basate su IP. La discussione seguente usa la famiglia di indirizzi IP versione 4 usata su Internet come esempio.
Gli indirizzi IP versione 4 usano 32 bit per specificare un indirizzo di rete. Per gli indirizzi della classe C che usano una maschera di rete 255.255.255.0, questi bit sono separati in quattro ottetti. Se espresso in decimale, i quattro ottetti formano la nota notazione quad con punti, ad esempio 192.168.100.2. I primi due ottetti (192.168 in questo esempio) formano il numero di rete, il terzo ottetto (100) definisce la subnet e l'ottetto finale (2) è l'identificatore host.
Impostando tutti i bit di un indirizzo IP su uno, ovvero 255.255.255.255, si forma l'indirizzo di trasmissione limitato. L'invio di un datagramma UDP a questo indirizzo recapita il messaggio a qualsiasi host nel segmento di rete locale. Poiché i router non inoltrano mai messaggi inviati a questo indirizzo, solo gli host nel segmento di rete ricevono il messaggio di trasmissione.
Le trasmissioni possono essere indirizzate a parti specifiche di una rete impostando tutti i bit dell'identificatore host. Ad esempio, per inviare una trasmissione a tutti gli host nella rete identificata da indirizzi IP a partire dalla versione 192.168.1, usare l'indirizzo 192.168.1.255.
Nell'esempio di codice seguente viene usato un UdpClient per l'ascolto dei datagrammi UDP sulla porta 11,000. Il client riceve una stringa di messaggio e scrive il messaggio nella 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();
}
}
Nell'esempio di codice seguente viene usato un Socket oggetto per inviare datagrammi UDP all'indirizzo di trasmissione diretto 192.168.1.255, usando la porta 11.000. Il client invia la stringa di messaggio specificata nella riga di comando.
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");
}
}