AnswerBun.com

Socket entre 2 dispositivos

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.

2 Answers

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

Add your own answers!

Related Questions

Converter data com timezone

4  Asked on December 11, 2021 by dudisroyer

     

Objeto não é atualizado

1  Asked on December 11, 2021

     

Entendimento sobre MVC

2  Asked on December 11, 2021 by carlos-rocha

     

Devo alimentar meu site pela API ou não?

1  Asked on December 11, 2021 by spacedogcs

     

Como pegar o nome de uma variável dentro de um método?

1  Asked on December 11, 2021 by pedro-martins

   

Label não atualiza através do setText no JavaFX

1  Asked on December 11, 2021 by filipe

     

Como usar o Enum.Parse()?

2  Asked on December 11, 2021 by thulio-mariano

     

Problema consultas avançadas MYSQL

2  Asked on December 11, 2021 by inovaarte-tecnologia

   

Laravel 6 escapando html blade template

2  Asked on December 11, 2021 by fernandosales

       

Ajuda com dados do PDO em PHP!

1  Asked on December 11, 2021 by marco-lustosa

     

Como definir um padrão de exibição de casas decimais no R?

1  Asked on December 11, 2021 by rtheodoro

   

Quebra de linhas

1  Asked on December 11, 2021 by vanderclin-rocha

       

Ask a Question

Get help from others!

© 2022 AnswerBun.com. All rights reserved. Sites we Love: PCI Database, MenuIva, UKBizDB, Menu Kuliner, Sharing RPP