Usar serviços UDP
A classe UdpClient se comunica com os serviços de rede usando o UDP. As propriedades e os métodos da classe UdpClient abstraem os detalhes da criação de um Socket para solicitar e receber dados usando o UDP.
O protocolo UDP é um protocolo simples que se esforça para fornecer dados para 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 a garantia de serem recebidos, nem a garantia de serem recebidos na mesma sequência em que são enviados. Os aplicativos que usam o UDP devem estar preparados para manipular datagramas ausentes, duplicados e fora de sequência.
Para enviar um datagrama usando o 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 usada pelo serviço para se comunicar. A IANA (Internet Assigned Numbers Authority) define os números da porta de serviços comuns (veja Registro de número da porta do protocolo de transporte e nome de serviço). Os serviços que não estão na lista da 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 difusão do 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 que usam uma máscara de rede 255.255.255.0, esses bits estão separados em quatro octetos. Quando expressos em decimais, os quatro octetos formam a notação quádrupla pontilhada conhecida, 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.
A configuração de todos os bits de um endereço IP como um ou 255.255.255.255, forma o endereço de difusão limitada. O envio de 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, somente os hosts no segmento de rede recebem a mensagem de difusão.
As difusões podem ser direcionadas a partes específicas de uma rede, com a configuração de todos os bits do identificador do host. Por exemplo, para enviar uma difusão para todos os hosts na rede identificada por endereços IP que começam 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)
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);
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");
}
}
Confira também
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de