Сеть Java: соединение отказано - Да, мой сервер работает - PullRequest
2 голосов
/ 30 августа 2010

Я получаю следующую ошибку, когда мой клиент пытается подключиться к сокету моего сервера:

java.net.ConnectException: Connection refused: connect

Но мой сервер действительно работает на той же машине. Я пытаюсь подключиться к нему с помощью внешнего IP-адреса моего маршрутизатора. Но когда я пытаюсь соединиться с "localhost", это работает. И да, я правильно сделал переадресацию портов в моем роутере. Даже canyouseeme.org может подключиться к моему серверу (на сайте написано: «успех» и в моем журнале сервера появляется сообщение о том, что кто-то подключен к серверу.)

Итак, по той или иной причине невозможно подключиться к одному и тому же компьютеру (или к компьютеру в той же сети) через внешний IP-адрес? Или это что-то типичное для Windows? (Обычно я использую Linux)

Я также пытался полностью отключить брандмауэр Windows.

ServerSocket:

public ServerSocket ssocket;
public List<ClientHandler> handlers;

public Server(int port) { // Constructor
    try {
        ssocket = new ServerSocket(port);
        this.handlers = new ArrayList<ClientHandler>();
        IpSharingManager.uploadData(Utilities.getPublicIp(), port);
    } catch (Exception e) {
        e.printStackTrace();
        System.exit(-1);
    }
}

Клиент:

public InvisibleClient(String host, int port) {
    try {
        System.out.println("Trying to connect to " + host + ":" + port);
        this.host = host;
        this.socket = new Socket(host, port);
        this.bis = new BufferedInputStream(this.socket.getInputStream());
        this.bos = new BufferedOutputStream(this.socket.getOutputStream());
        this.console = new RemoteConsole(this.socket);
        initializeCommunication();
        System.out.println("Successfully connected!");
        new Thread(this, "Client Thread").start();
    } catch (Exception e) {
        e.printStackTrace();
        System.out.println("No server available");
    }
}

Спасибо

Ответы [ 4 ]

3 голосов
/ 30 августа 2010

Некоторые маршрутизаторы не позволяют внутренней сети подключаться к внешнему IP-адресу маршрутизатора.

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

0 голосов
/ 30 августа 2010

Для того, что я вижу в вашем коде, вы пропустили ту часть, где вы принимаете соединение, после создания экземпляра сокета сервера вам нужна ssocket.accept () для принятия соединений, а затем вы должны начать чтение outputtrem из сокета

0 голосов
/ 30 августа 2010

Вы пробовали запустить его с опцией JVM: java.net.preferIPv4Stack=true?

0 голосов
/ 30 августа 2010

Добавить процесс java.exe и порт в список исключений брандмауэра?

edit: Только что прочитал, что вы уже пробовали это.Все, что я могу предложить, это убедиться, что сеть не блокирует этот порт.(маршрутизаторы)

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