alha na perfuração específica do host @UDP

Eu escrevi um programa que configura links ponto a ponto. O programa, que pode ser encontrado emhttp: //basyl.co.uk/code/punch/doc/files/Readme-txt.htm, está dividido em duas partes: um servidor que é executado em um host público; e um cliente usado por cada extremidade do link ponto a ponto desejado.

Tenho acesso a dois servidores públicos: 'bonn' (home.contextshift.co.uk) e 'entropy' (home2.contextshift.co.uk)

Se o servidor estiver em bonn e os clientes executarem em bonn, entropia e no meu PC em casa (atrás do NAT), uma conexão perfurada da entropia poderá conversar com o meu PC sem problemas. No entanto, uma conexão de bonn ao PC falha; os dados do PC atingem bonn, mas os dados de volta através do orifício NAT nunca chegam.

Se o servidor estiver em entropia e novamente, os clientes serão executados em bonn, entropia e no meu PC, as conexões perfuradas funcionarão bem entre todos os cliente

Isso é confuso, pois o servidor não está envolvido no fluxo de dados ponto a ponto. Se você ainda está comigo, aqui está o fluxo:

cliente-A se conecta ao servidor em um link TCP e obtém um token exclusiv

cliente-B se conecta ao servidor em um link TCP e obtém um token exclusiv

O Cliente A e o Cliente B recebem atualizações pelo link TCP informando quem mais está conectad

O Cliente A (ou B) envia uma solicitação ao Servidor através de um link UDP recém-criado, passando seu token e o nome do Cliente-

O servidor identifica o Cliente-A a partir do token e encaminha a solicitação para o Cliente-B pelo seu link TCP, incluindo o endereço UDP / número da porta de A na solicitaçã

O Cliente A (ou B) envia uma confirmação ao Servidor através de um link UDP recém-criado, passando seu token e o nome do Cliente

O servidor identifica o Cliente-B a partir do token e encaminha a solicitação para o Cliente-A através de seu link TCP, incluindo o endereço UDP / número da porta de B na solicitaçã

A e B agora têm o endereço / porta UDP do outro e podem executar ping um no outro e trocar dado

Como você pode ver, o servidor nunca fala nos links UDP criados pelos clientes para suas solicitações, apenas nos links TC

Então, em resumo, o cliente não funciona em um host específico quando o servidor está no mesmo host. Alguma sugestão por motivos desse comportamento ou por outras formas de investigar mais a fundo?

Observe que esse teste é artificial porque o objetivo do furador é conversar entre dois hosts, ambos atrás do NAT. Na verdade, isso funciona, onde quer que esteja o servidor, e o problema pode ser considerado acadêmic

Observe também que, antes de escrever o programa, tentei usar um aplicativo público chamado 'NatCheck'. Isso também falhou de maneira semelhante, embora eu não tenha investigado muito - ele exigiu três hosts públicos e o modifiquei para usar apenas meus dois. Quando não funcionou, presumi que tinha estragado de alguma maneira e descartado o aplicativ

uaisquer comentários sobre o código também são muito bem-vindos (provavelmente o publicarei no site de revisão de código

questionAnswers(6)

yourAnswerToTheQuestion