Pessoal,
Estou desenvolvendo um Jogo, e o desenho da arquitetura era client to client usando socket.
Ou seja todo cliente poderia ser um servidor onde outros clientes poderiam conectar neste servidor via socket e desafiar este cliente\servidor.
se o desafio for aceito, o jogo inicia.
existe um servidor central, que serve apenas para armazenar o Endereço IP dos clientes-servidores que estão esperando desafios.
O problema que estou enfrentando é IP.
Como descobrir o endereço de IP do cliente?
Já tentei algumas soluções:
- tentei usar o site http://checkip.amazonaws.com, porem quando uso este ip a conexão socket do cliente da Timeout.
- tentei usar InetAddress mas apesar de funcionar nos testes locais ele retorna um IP invalido, um ip de uso interno do tipo 192.168.0.**
Alguem tem alguma dica, sugestão ou solução?
Minha dica eh que voce pesquise um pouco mais sobre routing, NAT e firewalls.
Voce nao vai conseguir disponibilizar um servidor de sua maquina a partir de um IP interno, a nao ser que os clientes tambem facam parte da mesma rede (LAN games) ou o usuario do servidor faca um port forward e libere o acesso as portas da sua aplicacao na sua rede interna.
Obrigado pela dica s4nchez, pesquisei bastante sobre o assunto, principalmente sobre “port forward” .
Achei bastante gente com este problema, mas não achei solução. O mais perto que cheguei de uma solução foi seguindo a orientação deste link http://kennethxu.blogspot.com.br/2006/04/java-based-tcpip-port-forwarding.html
O maximo que consegui foi no momento do start do servidor, ocorre o erro “Exception in thread main java.net.BindException: Cannot assign requested address: JVM_Bind”
procurando por este erro, encontrei este topico de dezembro/2012 no proprio GUJ “http://www.guj.com.br/java/264482-cannot-assign-requested-address-jvm_bind”, mas novamente encontrei o problema mas não achei solução.
Deve existir uma maneira de abrir um porta atravez do java, afinal como programas P2P (uTorrent) fazem para funcionar?
Alguém consegue me ajudar a elaborar uma solução?
O codigo que implementei foi muito parecido com este http://portforward.googlecode.com/svn/trunk/src/org/enterprisepower/net/misc/EchoServer.java