ViniGodoy:
diego.psw:
Estou desenvolvendo um aplicativo em Java SE do tipo servidor de mensagens.
Existe o aplicativo Servidor e o cliente.
O servidor é responsável por gerenciar logins, status de usuários etc
e o a cliente é para visualizar status e enviar mensagens.
Este aplicativo está funcionando em redes internas normalmente, mas não tenho certeza se vai funcionar em redes externas por que quando
o aplicativo cliente A envia uma mensagem para o cliente B é direto, ou seja, o servidor não fica como intermediário nesta mensagem, a mensagem é enviada
diretamente do A pro B.
Alguém pode me dizer se este aplicativo pode funcionar em redes externas, por exemplo:
Se o cliente A estiver na Espanha e o cliente B estiver no Japão.
Agradeço desde já!
Se pelo menos um dos endereços tiver um IP público, vai funcionar. Entretanto, quem tem o IP privado deverá iniciar a conexão.
Se os dois estiverem atrás de um NAT, aí ferrou. Você só resolveria com um servidor publico, como faz qualquer servidor de messaging.
Mas este servidor atuaria como intermediário entre as mensagens?
Se sim, então teria que haver comunicação através de conexões ( Socket e ServerSocket ) em vez de pacotes simples(DatagramPacket DatagramSocket)?
se deve usar conexão ( Socket e ServerSocket ) e o computador que roda cliente está atrás de um NAT fala para o roteador o seguinte quando a conexão é iniciada:
O roteador, abre uma porta aí temporariamente(enquanto a conexão estiver aberta, mas não permita pacotes intrusos), para que o servidor comunique comigo sem que eu precise enviar um pacote para ele antes, ou seja, o servidor determina a hora certa que o cliente deve atualizar alguma coisa?
Se tudo que eu falei acima é verdadeiro, então não é possível fazer uma comunicação completa somente por DatagramPacket e DatagramSocket, porque é preciso
que a comunicação seja feita numa camada de alto nível da suíte de protocolos TCP/IP onde o computador e o com ip privado possa pedir para o roteador abrir uma porta
temporariamente e não permitir pacote intrusos( esta seria a conexão protegida! )?
Quando digo que o computador com ip privado pede para o roteador abrir uma porta para que a conexão seja estabelecida, quero dizer que o computador e o roteador
devem trabalhar na mesma camada da suíte TCP/IP! Agora não sei se é desta forma! imagino que seja assim!
Mas minhas conclusões atuais dizem que não é possível o servidor notificar o cliente se os dois trabalham na camada (DatagramPacket e DatagramSocket)
A questão é que quero entender como este processo funciona, porque a utilização já entendi!