Acesso Remoto pela internet

Bom dia, eu gostaria de saber como fazer para que duas aplicações se comuniquem através da internet. Usando a classe Socket eu consegui fazer duas aplicações se comunicarem em uma rede local, mas não estou conseguindo o mesmo através da internet. Tem como alterar o código a baixo para que funcione do jeito que eu quero?

Server

[code]ServerSocket serverSocket = new ServerSocket(5000);
Socket socket = serverSocket.accept();
DataInputStream in = new DataInputStream(socket.getInputStream());
DataOutputStream out = new DataOutputStream(socket.getOutputStream());

JOptionPane.showMessageDialog(null, in.readUTF());
out.writeUTF(“Mensagem recebida do servidor!!! XD”);

in.close();
out.close();
socket.close();
serverSocket.close();[/code]

Client

[code]Socket socket = new Socket(“192.168.0.1”, 5000);
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
DataInputStream in = new DataInputStream(socket.getInputStream());

out.writeUTF(“Mensagem recebida do cliente!!! XD”);
JOptionPane.showMessageDialog(null, in.readUTF());

in.close();
out.close();
socket.close();[/code]

Flw!!!

  • se o server/host tiver um firewall, não vai da
  • se o server/host tiver usando uma conexao roteado, fica dificil …

eu tambem estou com esse problema !! hehehe :oops:

parece q vou ter de inventar algo como enviar mensagem … (ou email) …

flw

o server tem firewall, mas ja habilitei a conexão pra minha aplicação.

a conexão do server eh roteada sim, e eu acho q eh por isso q ta dando problema! :cry:
penso q a instanciação do ServerSocket vai continuar a mesma, e que a instanciação do Socket no client deveria mudar, pois deveria ter como eu passar a informação completa de dois IP’s, o IP do roteador e o IP do server! Eu dei uma olhada na documentação da classe Socket e to tentando usar outros construtores, mas por enquanto, nada! :?

se conseguir, posta ai a solução!

isso não vai funcionar pra mim!

Qualquer coisa, estamos ae! Flw! 8)

entao vai ter de fazer redirecionamento de porta no modem banda larga !!!
informar qual a porta que vc ta usando no socket .

[quote]entao vai ter de fazer redirecionamento de porta no modem banda larga !!!
informar qual a porta que vc ta usando no socket .[/quote]
ue… eu tenho q configurar o roteador na mão pra ele aceitar a aplicação? mas quando vc conecta na internet e abre um site, o servidor te envia a pagina html sem precisar de configuração! :?
tipo, e muitos programas q funcionam atraves da internet, nao precisam disso! eh soh rodar e pronto! nao sei se java tem essa opção, mas deveria ter um jeito de eu especificar o IP do roteador, e depois especificar o IP Local e a porta do servidor na rede local! :?
Flw ae!!!

eu tive esta experiencia para fazer acesso a camaras de vigilancia.
tive de redirecionar a porta para ter acesso externo.
funciona ate o vnc.

  • mas depois encontrei outro soft melhor, q nao precisa desta configuracao.

vlw

Boa tarde.

Eu estou com um pequeno problema que é de certo modo parecido com o aqui descrito.

Eu faço power on de várias máquinas por sockets. Até aqui tudo bem. O meu problema, é que para iniciar totalmente essas máquinas necessito de fazer login!!! Há alguma forma de ligar uma máquina e depois fazer login? Existem alguma framework em java que faça isso?

Cmpts

Amigo dependendo do protocolo que teu sistema utiliza vai ter essa limitação de roteamento.
aplicações que rodam em cima do protocolo http( porta 80, 8080) por exemplo, é o proprio protocolo quem faz o gerenciamento dos pacotes enviados e recebidos.
e as outras portas 5500,5900(vnc) e outras não tem este tipo de gerenciamento, nem mesmo a 3389 (TS) todas tem que ser roteadas na unha dentro do moden–>router–>servidor.

Tenta descrever a tua estrutura de rede, isso ajuda a ter uma idéia do que fazer…

Ligar os computadores eu conseguia, o problema era autenticar-me remotamente à máquina que pedia para ligar…

Tens alguma ideia?

Olá,
estou tendo o mesmo problema…
eu tenho o modem banda larga que ta ligado no roteador que eu acho que é desses 80 que foi falado. eu acho isso porque quando eu entro na pagina do modem eu vejo escrito o ip:80.
esse roteador distribui a conexao. um dos pontos é o meu computador.
eu tenho o ip da internet (conexao banda larga) e tenho o endereco local do meu computador.
eu tentei no cliente criar uma instancia de socket passando pro construtor o ip da internet, a porta do modem (eu acho que é 80), o endereco da rede local e a porta do meu computador que foi definida em serversocket. isso nao funcionou.
alguem tem alguma ideia?

Consegui!!!
Pra quem tem a mesma dúvida é o seguinte:

Se o servidor recebe a internet direto (não tem hub, roteador, etc) é simples: basta passar como parâmetro pro construtor de Socket (do lado do cliente) o endereço de IP do servidor usando a classe InetAddress e a porta que o servidor recebe os dados. Exemplo:
Socket socket = new Socket(InetAddress.GetByName(“xxx.xxx.xxx.xxx”),xxxxx);
onde: xxx.xxx.xxx.xxx é o endereço de IP do servidor e xxxxx é a porta por onde ele recebe os dados.

Se o servidor estiver recebendo a internet através de um roteador (estiver numa rede local), aí é um pouco mais complicado, mas dá pra fazer:
No lado do cliente é igual ao anterior, mas no servidor você precisa configurar no roteador pra, sempre que alguém tentar na porta xxxxx ele mandar direto pro pc da rede local onde o servidor ta rodando. Essa configuração varia de roteador pra roteador, mas vou mostrar como fiz aqui. Deve ser algo parecido.
Na página de configuração do meu roteador tem uma configuração chamada “Virtual Service”. Ele pede um endereço de IP, um protocolo, e uma faixa de porta.
No endereço de IP você coloca seu ip de rede local: 192.168.x.x.
Em protocolo você escolhe Both (TCP + UDP).
E na faixa de porta você escolhe uma faixa qualquer que a porta do servidor esteja incluída. Por exemplo: suponha que o servidor está conectando pela porta 10000. A faixa de porta pode ser 5000 - 15000. Isso significa que qualquer um que tentar entrar numa porta entre 5000 e 15000, será direcionado direto pro pc referente ao endereço local passado.

Com isso deve funcionar.