UDP Client & Receiver – C# – Protocolo UDP

Estudando sobre o assunto esses dias, resolvi estar postando meu estudo sobre Protocolo UDP , e algumas Sources .NET C# (Montando um UDP Receiver (Server) e um UDP Client).

Bom antes de começarmos com os códigos vamos com um pouco de teoria… O que é protocolo UDP ? bom … primeiramente ele é um protocolo de transporte que pode ser encapsulado em IPv4 ou IPv6 para ser enviado ao destino. Porem você não pode confiar ou ter a certeza que esse pacote chegou ao seu destino corretamente. Protocolo UDP é confiavel ? Não … porque, ele é um protocolo orientado a fluxos de bytes sem início e sem fim. Ex: Você não precisa manter uma conexão direta com o server, assim, um cliente UDP pode criar um socket, enviar um datagrama para um server e imediatamente enviar outro com o mesmo socket para um server diferente. Da mesma forma, um servidor poderia ler datagramas vindos de diversos clientes, usando um único socket. Ele pode se tornar confiavel ? Sim , porem , é preciso implementar uma série de estruturas de controle.

Vantagens do uso do UDP

  • O UDP é uma escolha adequada para fluxos de dados em tempo real, especialmente aqueles que admitem perda ou corrompimento de parte de seu conteúdo, tais como vídeos ou voz. Aplicações sensíveis a atrasos na rede, mas poucos sensíveis a perdas de pacotes, como jogos de computadores, também podem se utilizar do UDP. As garantias de TCP envolvem retransmissão e espera de dados, como consequência, intensificam os efeitos de uma alta latência de rede.
  • O UDP também suporta broadcasting e multicasting. Caso esses recursos sejam necessários, o UDP deverá necessariamente ser utilizado. Algum tratamento de erro pode ser adicionado, mas geralmente aplicações multicast também admitem perda de parte dos pacotes ou fazem retransmissões constantes (tal como o ocorre no protocolo DHCP).
  • O UDP não perde tempo com criação ou destruição de conexões. Durante uma conexão, o UDP troca apenas 2 pacotes, enquanto no TCP esse número é superior a 10. Por isso, aplicações que encaixam num modelo de pergunta-resposta também são fortes candidatas a usar UDP. Entretanto, pode ser necessário implementar algoritmos de timeouts, acks e, no mínimo, retransmissão. Nesse caso, vale lembrar que se a troca de mensagens for muito intensa, o protocolo TCP pode voltar a ser vantajoso, já que seu custo de conexão será amortizado.

Agora sim … vamos aos códigos … Montar um cliente ou servidor UDP em C# é bem simples, vamos trabalhar com Socktes.

Cliente UDP

class UdpClient {
public static void UDPTask(String IpDest, Int32 Port, Byte[] SendBuffer) {
//IP do Destino
IPAddress destinationIPaddress = IPAddress.Parse(IpDest);
//EndPoint
IPEndPoint ep = new IPEndPoint(destinationIPaddress, Port);
//Cria a chamada Socket
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
//Envia os dados em byteArray.
s.SendTo(SendBuffer, ep);
//Intervalo
Thread.Sleep(2000);
}
}

UDP Receiver (Servidor)

public static void Connect() {

try {

soUdp =

new Socket(AddressFamily.InterNetwork, SocketType.Dgram,

ProtocolType.Udp);

soUdp.SetSocketOption(SocketOptionLevel.Socket,

SocketOptionName.ReuseAddress, 1);

try {

localHostEntry = Dns.GetHostByName(Dns.GetHostName());

} catch (Exception) {

Console.WriteLine(“Local Host not found”);

return;

}

IPEndPoint localIpEndPoint =

new IPEndPoint(localHostEntry.AddressList[0], 8090);

soUdp.Bind(localIpEndPoint);

} catch (Exception ex) {

}

}

public static string StartReceiveFrom() {

string Loader = String.Empty;

Byte[] received = new Byte[1500];

IPEndPoint tmpIpEndPoint =

new IPEndPoint(localHostEntry.AddressList[0], 9080);

EndPoint remoteEP = (tmpIpEndPoint);

int bytesReceived = soUdp.ReceiveFrom(received, ref remoteEP);

String dataReceived = System.Text.Encoding.ASCII.GetString(received);

Loader = dataReceived;

return Loader;

}

}

5 opiniões sobre “UDP Client & Receiver – C# – Protocolo UDP”

  1. Olá, sou novo na área da programação, estou em busca de algo que possa me ajudar a testar uma conexão cliente servidor em uma vpn, pelo que eu entendi o seu código pode me ajudar.

    Você poderia me dar algumas instruções referente ao código, tais como o que inicializará o teste da porta.

    Precisarei criar um form ? Crio uma dll ?

    Ficarei muito grato com sua ajuda.
    VLW…

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s