Pergunta

UDP doesnot envia qualquer volta ack, mas será que vai enviar qualquer resposta?

Eu configurei programa cliente servidor UDP. Se eu der o cliente para enviar dados ao servidor inexistente, em seguida, irá cliente receber qualquer resposta?

A minha suposição é tão;

Client -> Transmissão endereço do servidor (ARP) Server -> Responder a cliente com seu endereço MAC (ARP) O cliente envia dados para o servidor (UDP)

Em qualquer caso cliente só receberá resposta ARP. Se o servidor existe ou não ele não vai obter qualquer resposta UDP?

Cliente está usando a função sendto para enviar dados. Nós podemos obter informações de erro após chamada sendto.

Assim, a minha pergunta é como esta informação está disponível quando o cliente não recebe qualquer resposta. O código de erro pode ser começar a partir de WSAGetLastError.

Eu tentei enviar dados para anfitrião inexistente e sendto chamar teve êxito. De acordo com a documentação que deve falhar com valor de retorno SOCKET_ERROR.

Todos os pensamentos ??

Foi útil?

Solução

Você nunca pode receber um erro ou aviso para um pacote UDP que não chegar ao destino.

Outras dicas

A chamada sendto não falhou. O datagrama foi enviado para o destino.

O destinatário do datagrama ou algum roteador no caminho para ele pode retornar uma resposta de erro (host inacessível, porta inalcançável, TTL excedido). Mas a chamada sendto será história no momento em que seu sistema recebe. Alguns sistemas operacionais fornecem uma maneira de descobrir isso ocorreu, muitas vezes com uma chamada getsockopt. Mas desde que você não pode confiar em obter uma resposta de erro de qualquer maneira, uma vez que depende das condições da rede que você não tem controle sobre, é geralmente melhor para ignorá-lo.

protocolos Sensible camadas em cima de respostas usam UDP. Se você não obtiver uma resposta, então ou a outra extremidade não obter a sua datagrama ou a resposta não fazê-lo de volta para você.

"UDP é um protocolo sem conexão mais simples baseada em mensagens. Em protocolos sem conexão, não há nenhum esforço para configurar uma conexão dedicada end-to-end. Comunicação é conseguido através da transmissão de informações em uma direção , da origem ao destino sem verificar para ver se o destino ainda está lá, ou se ele está preparado para receber as informações. "

A máquina para a qual você está enviando pacotes podem responder com uma porta inacessível mensagem ICMP UDP.

protocolo

O UDP é implementado em cima de IP. Você envia pacotes UDP para hosts identificados por endereços IP, não endereços MAC.

E, como fora apontado, em si UDP não vai enviar uma resposta, você terá que adicionar o código para fazer isso sozinho. Então você terá que adicionar o código que esperar a resposta, e tomar a ação apropriada, se a resposta for perdido (normalmente reenviar em um temporizador, até que você decida a outra extremidade está "morto"), e assim por diante.

Se você precisar UDP confiável quanto na ordenação ou verificação de tal forma que TCP / IP vai dar-lhe dar uma olhada em RUDP ou UDP confiável. Às vezes você faz a verificação necessidade, mas uma mistura de UDP e TCP pode ser realizada até sobre a fiabilidade TCP causando um gargalo.

Para mais larga escala MMO para isntance UDP e Reliablity UDP são os meios de comunicação e confiabilidade. Todos RUDP faz é adicionar uma porção menor de TCP / IP para validar e ordem certas mensagens, mas não todos.

A biblioteca de desenvolvimento jogo comum de rede é RakNet que tem esta embutido.

RUDP http://www.javvin.com/protocolRUDP.html

Um exemplo de RUDP usando RakNet e Python http://pyraknet.slowchop.com/

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top