1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Java socket problems, timed out

Eu fiz uma aplicação de cliente servidor Java usando como o endereço IP localhost, usando este endereço funciona perfeitamente. Quando eu altero o endereço de localhost para o endereço IP da máquina (PC) onde minha aplicação Java Server está rodando começou meus problemas.

Depois de pesquisar muito aqui no GUJ, encontrei um post do byiorio, recebi o código (o servidor passa um arquivo txt e o cliente lê, simples) e eu comecei a testar, sem sucesso. Atualmente, o erro que está me dando é TIMED OUT, minha configuração é a seguinte:

1: pc executando o Windows 8, onde meu programa Java Server roda;

2: laptop MAC OS onde eu chamo meu programa JAVA cliente para acessar o pc;

3: roteador TP-Link;

4: Eu criei no roteador o endereço IP do meu PC a porta que eu uso para o cliente.

Eu também vi aqui nos fóruns que no firewall precisamos criar uma regra para isso; Como não funcionava, desabilitei o firewall do Windows para testar minha aplicação e mesmo assim continuou dando o mesmo erro.

Eu digo novamente, usando o localhost tudo funciona, se uso o endereço de IP real do meu PC dá erro de TIMED OUT. Alguém tem alguma sugestão ou solução para me ajudar?

Código Server:

package server_tst_01;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server_Tst_01 
{
    public static void main (String [] args)
    {
        Server_Tst_01 servidor = new Server_Tst_01();

        servidor.esperaCliente();
    }

    public void esperaCliente()
    {
        OutputStream socketOut = null;
        ServerSocket serversocket = null;
        FileInputStream fileInS = null;

        try
        {
            serversocket = new ServerSocket(15999);
            System.out.println("Porta de conexão aberta...");

            Socket socket = serversocket.accept();
            System.out.println("Conexão recebida pelo cliente..." +
                    socket.getInetAddress().getHostAddress());

            byte[] cbufer = new byte[1024];
            int bytesread;

            File file = new File("C:\\Arquivos de programas/ITC_Systems_TST/File_HORA.txt");
            fileInS = new FileInputStream(file);
            System.out.println("Lendo arquivo...");

            socketOut = socket.getOutputStream();

            System.out.println("Enviando arquivo lido...");
            while ((bytesread = fileInS.read(cbufer)) != -1);
            {
                socketOut.write(cbufer, 0, bytesread);
                socketOut.flush();
            }
            System.out.println("Arquivo enviado...");
        }catch (Exception e)
        {
            e.printStackTrace();
        }
        finally
        {
            if(socketOut != null)
            {
                try
                {
                    socketOut.close();
                }catch(IOException e)
                {
                    e.printStackTrace();
                }
            if(serversocket != null)
            {
                try
                {
                    serversocket.close();
                }catch(IOException e)
                {
                    e.printStackTrace();
                }
            }
            if(fileInS != null)
            {
                try
                {
                    fileInS.close();
                }catch(IOException e)
                {
                    e.printStackTrace();
                }
            }
            }
        }
    }
}

Código Cliente:

package itc_cliente;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;

public class ITC_Cliente {

    public static void main(String[] args) 
    {
        ITC_Cliente cliente = new ITC_Cliente();

        cliente.getFileFromServer();
    }
    private void getFileFromServer()
    {
        Socket socketServer = null;
        FileOutputStream fost = null;
        InputStream inst = null;

        try
        {
            // criando comunicacao com o servidor
            System.out.println("Conectando-se com o servidor..");
            socketServer = new Socket("192.168.1.104", 15999);
            inst = socketServer.getInputStream();

            // Cria arquivo local no cliente
            fost = new FileOutputStream(new File
                ("/Users/tiagoiereperdomocorrea/ITCSystems/File_Hora.txt"));
            System.out.println("Arquivo criado...");

            // prepara variaveis para transferencia
            byte[] cbuffer = new byte[1024];
            int byteslidos;
            // copia bytes do canal
            System.out.println("Recebendo arquivo...");
            while ((byteslidos = inst.read(cbuffer)) !=-1)
            {
                fost.write(cbuffer, 0, byteslidos);
                fost.flush();
            }
            System.out.println("Arquivo recebido...");
        }catch (Exception e)
        {
            e.printStackTrace();
        }
        finally
        {
            if (socketServer != null)
            {
                try
                {
                    socketServer.close();
                }catch (IOException e1)
                {
                    e1.printStackTrace();
                }
            }
            if (fost != null)
            {
                try
                {
                    fost.close();
                }catch (IOException e1)
                {
                    e1.printStackTrace();
                }
            }
            if (inst != null)
            {
                try
                {
                    inst.close();
                }catch (IOException e1)
                {
                    e1.printStackTrace();
                }
            }
        }
    }

}
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags java ou faça a sua própria pergunta.