Eu estava estudando essa página sobre conexão TCP em servidores com java, mas surgiu uma
dúvida:
Quando o cliente faz:
Socket cliente = new Socket("paulo",12345);
ObjectInputStream entrada = new ObjectInputStream(cliente.getInputStream());
Como que ele sabe o IP do servidor que ele deve se conectar? Eu não sei o que deixei passar, talvez eu esteja confundido algum conceito.
Não sei se o tutorial explica, mas o primeiro parâmetro do new Socket() é o host, ao qual o cliente irá se conectar. No caso, foi usado “paulo”, então nesse tutorial, suponho que a máquina que está rodando o servidor tenha esse nome.
Você chegou a concluir o tutorial, e rodou o exemplo? Desconfio que não vai rodar de primeira. Você pode ter de ajustar aí o nome do host pra ser o nome do seu computador na rede.
Referência: Socket (Java Platform SE 7 ) , na parte de construtores.
Abraço.
É que essa parte é a do cliente. O servidor mesmo faz isso:
ServerSocket servidor = new ServerSocket(12345);
System.out.println("Servidor ouvindo a porta 12345");
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();
}
}
E o Cliente faz isso:
Socket cliente = new Socket("paulo",12345);
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");
Pelo que entendi, “paulo” era o nome do cliente. Em nenhuma parte o servidor recebeu esse nome. To mt confuso. Parece que ele só usou a porta.
É ao contrário: “paulo” é o nome do servidor (hostname) ao qual o cliente quer se conectar.
Por isso perguntei se você tinha rodado o exemplo. Se seu computador não se chama “paulo”, você vai conseguir rodar o servidor, mas quando rodar o cliente (que deve ser rodado após o servidor já estar rodando), vai obter um erro, pois o cliente não vai achar um servidor com o hostname informado.
No caso, “paulo” está fazendo o papel de endereço do servidor. Você pode entender como se “paulo” fosse o endereço ip, embora no detalhe não seja a mesma coisa. E, se quer rodar o código, precisa ajustá-lo para seu ambiente.
Abraço.
2 curtidas