Stack Overflow em Português Asked by Beto on December 18, 2020
Gostaria de enviar dados entre maquinas diferentes, entre 2 computadores, entre um computador e um Android por exemplo.
Fiz o exemplo internamente, no mesmo computador, mas quando separo (o servidor fica em um computador e o cliente vai para outro. Não dá certo).
Servidor:
public static void main(String[] args) {
try {
// Instancia o ServerSocket ouvindo a porta 12345
ServerSocket servidor = new ServerSocket(12345);
System.out.println("Servidor ouvindo a porta 12345");
// servidor.bind(new InetSocketAddress("192.168.5.1", 0));
InetAddress inet = servidor.getInetAddress();
System.out.println("HostAddress="+inet.getHostAddress());
System.out.println("HostName="+inet.getHostName());
while(true) {
// o método accept() bloqueia a execução até que
// o servidor receba um pedido de conexão
Socket cliente = servidor.accept();
System.out.println("Cliente conectado: " + cliente.getInetAddress().getHostAddress());
ObjectOutputStream saida = new ObjectOutputStream(cliente.getOutputStream());
saida.flush();
saida.writeObject(new Date());
saida.close();
cliente.close();
}
}
catch(Exception e) {
System.out.println("Erro: " + e.getMessage());
}
}
Cliente:
public static void main(String[] args) {
try {
Socket cliente = new Socket("0.0.0.0",12345);
InetAddress inet = cliente.getInetAddress();
System.out.println("HostAddress="+inet.getHostAddress());
System.out.println("HostName="+inet.getHostName());
ObjectInputStream entrada = new ObjectInputStream(cliente.getInputStream());
Date data_atual = (Date)entrada.readObject();
JOptionPane.showMessageDialog(null,"Data recebida do servidor:" + data_atual.toString());
entrada.close();
System.out.println("Conexão encerrada");
}
catch(Exception e) {
System.out.println("Erro: " + e.getMessage());
}
}
O estranho é que a saída do servidor é:
Servidor ouvindo a porta 12345
HostAddress=0.0.0.0
HostName=0.0.0.0
Aí quando tento colocar o cliente em outro computador não dá certo, mesmo inserindo (no cliente) o IP em que o servidor está.
Obs.: As máquinas estão em redes diferentes.
Obs².: Fiz teste mesmo com o firewall do Windows desativado e não deu certo.
Sobre o output do servidor:
O output está correto, como você não especificou qual IP era pra dar bind, ele deu bind em todos da interface de rede.
Sobre o código:
Socket cliente = new Socket("0.0.0.0",12345);
Eu apenas alterei o "0.0.0.0" para o IP do meu servidor remoto e o código funcionou corretamente. Você deve estar com algum bloqueio de firewall.
Answered by Foreign on December 18, 2020
No cliente você precisa passar o endereço IP ou hostname do servidor.
Socket cliente = new Socket("0.0.0.0",12345); // <<< errado
Não conheço Java, mas a linha acima deveria ser
Socket cliente = new Socket("127.0.0.1",12345); // <<< mesma máquina
ou
Socket cliente = new Socket("10.172.36.130",12345); // <<< outra máquina
onde "10.172.36.130" é só um exemplo, você precisa substituir pelo IP (ou nome) da máquina onde seu servidor está rodando.
Answered by zentrunix on December 18, 2020
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP