Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
A UdpClient classe se comunica com serviços de rede usando UDP. As propriedades e os métodos da UdpClient classe abstraem os detalhes da criação de um Socket para solicitar e receber dados usando UDP.
O UDP (User Datagram Protocol) é um protocolo simples que faz o melhor esforço para entregar dados a um host remoto. No entanto, como o protocolo UDP é um protocolo sem conexão, os datagramas UDP enviados para o ponto de extremidade remoto não têm garantia de chegar, nem têm garantia de chegar na mesma sequência em que são enviados. Os aplicativos que usam UDP devem estar preparados para lidar com datagramas ausentes, duplicados e fora de sequência.
Para enviar um datagram usando UDP, você deve saber o endereço de rede do dispositivo de rede que hospeda o serviço necessário e o número da porta UDP que o serviço usa para se comunicar. A IANA (Autoridade de Números Atribuídos à Internet) define os números de porta para serviços comuns (consulte o Registro de Nome de Serviço e Número da Porta do Protocolo de Transporte). Os serviços que não estão na lista IANA podem ter números de porta no intervalo de 1.024 a 65.535.
Endereços de rede especiais são usados para dar suporte a mensagens de transmissão UDP em redes baseadas em IP. A discussão a seguir usa a família de endereços IP versão 4 usada na Internet como exemplo.
Os endereços IP versão 4 usam 32 bits para especificar um endereço de rede. Para endereços de classe C usando uma máscara 255.255.255.0, esses bits são separados em quatro octetos. Quando expressos em decimais, os quatro octetos formam a notação quadriculada familiar, como 192.168.100.2. Os dois primeiros octetos (192.168 neste exemplo) formam o número da rede, o terceiro octeto (100) define a sub-rede e o octeto final (2) é o identificador do host.
Definir todos os bits de um endereço IP como um, ou 255.255.255.255, forma o endereço de difusão limitado. Enviar um datagrama UDP para esse endereço entrega a mensagem para qualquer host no segmento de rede local. Como os roteadores nunca encaminham mensagens enviadas para esse endereço, apenas os hosts no segmento de rede recebem a mensagem de transmissão.
As transmissões podem ser direcionadas para partes específicas de uma rede definindo todos os bits do identificador do host. Por exemplo, para enviar uma transmissão para todos os hosts na rede identificada por endereços IP começando com 192.168.1, use o endereço 192.168.1.255.
O exemplo de código a seguir usa um UdpClient para escutar datagramas UDP na porta 11.000. O cliente recebe uma cadeia de caracteres de mensagem e grava a mensagem no 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();
}
}
O exemplo de código a seguir usa um Socket para enviar datagramas UDP para o endereço de difusão direcionado 192.168.1.255, usando a porta 11.000. O cliente envia a cadeia de caracteres de mensagem especificada na linha de 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");
}
}