Sockets Linux/Windows [RESOLVIDO]

Estou criando uma simples aplicação utilizando Sockets, rodando no Ubuntu, onde o cliente envia uma mensagem e o servidor escreve-a. Apenas para fins de testes.

Executando os dois na mesma máquina funciona perfeitamente, mas quando executo em outra máquina (Windows), que está em minha rede, o cliente não consegue se conectar ao server.

Tem alguma configuração que devo fazer para essa aplicação ?

Obrigado desde já a qualquer ajuda.

[quote=tonycb]Estou criando uma simples aplicação utilizando Sockets, rodando no Ubuntu, onde o cliente envia uma mensagem e o servidor escreve-a. Apenas para fins de testes.

Executando os dois na mesma máquina funciona perfeitamente, mas quando executo em outra máquina (Windows), que está em minha rede, o cliente não consegue se conectar ao server.

Tem alguma configuração que devo fazer para essa aplicação ?

Obrigado desde já a qualquer ajuda.[/quote]

Olá, se vc esta usando a porta correta e o endereço correto a unica coisa que me ocorre agora é que o firewall pode estar bloqueando o acesso ao servidor!!

Estou usando a porta que indicava no tutorial.

Server:

ServerSocket server = null;
Socket client;
String entrada;

try {
    // 1234 é um número de porta não utilizado
    server = new ServerSocket(1234);
} catch (IOException ie) {
    System.out.println("O socket não pode ser aberto.");
    System.exit(1);
}

try {
    client = server.accept();
    OutputStream clientOut = client.getOutputStream();
    PrintWriter pw = new PrintWriter(clientOut, true);
    InputStream clientIn = client.getInputStream();
    BufferedReader br = new BufferedReader(new InputStreamReader(clientIn));
    entrada = br.readLine();
    pw.println(client.getLocalAddress() + ": " + entrada);
    System.out.println("Mensagem recebida: " + entrada);
} catch (IOException ie) {
}

Client:

try {
    Socket client = new Socket("java.sun.com", 1234);
    InputStream clientIn = client.getInputStream();
    OutputStream clientOut = client.getOutputStream();
    PrintWriter pw = new PrintWriter(clientOut, true);
    BufferedReader br = new BufferedReader(new InputStreamReader(clientIn));
    BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
    System.out.println("Digite uma mensagem para o servidor: ");
    pw.println(stdIn.readLine());
    System.out.println("Mensagem do Servidor: ");
    System.out.println(br.readLine());
    pw.close();
    br.close();
    client.close();
} catch (ConnectException ce) {
    System.out.println("Não foi possível se conectar ao servidor.");
} catch (IOException ie) {
    System.out.println("Erro de I/O.");
}

Então, como eu disse. Desse jeito, com esse código, executando em um computador na minha rede, usando Windows, o client não consegue conectar no server.

Alguma ideia ?

Aí é mais uma questão de rede do que da Socket em si…

java.sun.com é o host/IP do seu server?

Coloque um IP válido da rede, que pode ser obtido com ipconfig no Windows ou ifconfig no Ubuntu.

Para validar se o cliente consegue enxergar o servidor, sugiro tentar dar um “ping ip” no terminal.

Valeu!

Problema resolvido.

Bruno, fiz o que você sugeriu. Apenas conectei meu client no ip da máquina server. Foi ignorância minha.

Obrigado também GodZilla_XF.