Java - в Socket произошла ошибка «Тайм-аут соединения» или «Нет маршрута к хосту» с определенным Интернетом - PullRequest
0 голосов
/ 16 августа 2011

Я делаю пару клиент / сервер с сокетами для отправки и получения данных туда и обратно.Когда я нахожусь дома в Интернете, используя две отдельные машины для клиент / сервер, он работает нормально, как и ожидалось.Данные передаются и пр.

Однако сегодня, когда я работал в местной кофейне (Второй Кубок, если это актуально), это не сработало.Я продолжал получать следующие ошибки: либо истекло время ожидания соединения, либо нет маршрута к хосту.

Вот соответствующий код:

Сервер:

public class TestServer {

public static void main(String[] args) throws Exception {

    TestServer myServer = new TestServer(); 
    myServer.run(); 

}

private void run() throws Exception {

    ServerSocket mySS = new ServerSocket(9999);     

    while(true) {

        Socket SS_accept = mySS.accept(); 

        BufferedReader myBR = new BufferedReader(new InputStreamReader(SS_accept.getInputStream()));

        String temp = myBR.readLine(); 
        System.out.println(temp); 

        if (temp!=null) {

            PrintStream serverPS = new PrintStream(SS_accept.getOutputStream()); 
            serverPS.println("Response received"); 

        }

    }
}

}

Клиент: (соответствующая часть)

//sends a command to the server, and returns the server's response
private String tellServer(String text) throws Exception {

    mySocket = new Socket("192.168.0.XXX", 9999); //the IPv4 address      

    //use the socket's outputStream to tell stuff to the server 
    PrintStream myPS = new PrintStream(mySocket.getOutputStream()); 
    myPS.println(text); 

    //the following code will get data back from the server
    BufferedReader clientBR = new BufferedReader(new InputStreamReader(mySocket.getInputStream())); 
    String temp = clientBR.readLine(); 

    if (temp!=null) {
        return temp; 
    } else {
        return ""; 
    }

}

Это так просто, как может быть.Опять же, как уже упоминалось, дома в моем интернете все работает нормально - просто сделайте ipconfig, возьмите IPv4-адрес и вставьте его для клиента.В кофейнях с бесплатным Wi-Fi это не работает.Я даже на всякий случай повозился со многими разными портами.

Спасибо за любую помощь, я новичок в сокетах и ​​нахожу это запутанным.

Ответы [ 2 ]

2 голосов
/ 16 августа 2011

192.168.x.y является локальным адресом. источник

Вам нужен IP-адрес вашей домашней машины, как его видит ИНТЕРНЕТ.

Когда вы следующий дома, перейдите на http://www.whatismyip.com/ и посмотрите, что вы думаете.

Обратите внимание, что вам может потребоваться перейти на маршрутизатор и перенаправить трафик с маршрутизатора на компьютер для порта 9999, поскольку это то, что вы, вероятно, будете использовать.

1 голос
/ 16 августа 2011

Когда вы используете сервер и клиент на одном компьютере, вы можете использовать адрес обратной связи 127.0.0.1, когда находитесь в кафе.

Использование адреса обратной связи и запуск сервера и клиента на одном компьютере должны работать все время, будь то дома или вне его.

Вы можете проверить свой IP-адрес в соответствии с предложением Total, ноэто останется прежним, только если у вас есть статический IP.Если вы не уверены в наличии статического или динамического IP-адреса, возможно, у вас динамический IP-адрес, но вам следует проверять свой IP-адрес несколько раз в неделю или около того, чтобы увидеть какие-либо изменения.

Другойальтернатива - рассмотреть бесплатный DNS-сервер, например, http://freedns.afraid.org/, установить задание регулярно обновлять ваш IP-адрес с помощью этой службы и использовать любое доменное имя, выбранное вами для доступа к локальному серверу.

При любом способе удаленного доступа к домашней сети вам нужно будет перенаправить трафик на 9999 на соответствующий компьютер в вашей домашней сети.

HTH:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...