Не удается подключиться к серверу Java с внешнего клиента

#java #http #external #host

#java #http #внешний #хост

Вопрос:

Я создаю персональный инструмент, который обслуживает файлы через HTTP на Java. Для части HTTP-сервера я использую пакет com.sun.net.httpserver.HTTPServer. Когда я подключаюсь со своего компьютера, используя localhost или имя внешнего хоста, это работает, но когда я пытаюсь подключиться к нему с внешнего клиента, это просто не работает. Я также хотел бы упомянуть, что файл политик Java по умолчанию никогда не изменялся, и что я нахожусь за маршрутизатором, и что порт правильно перенаправлен. Я попытался изменить файл политик, но у меня не было никакого успеха, хотя я не знаю, были ли настройки правильными или они были применены, и я прочитал поток, в котором была аналогичная проблема, но с использованием rmi, которая была решена путем установки системного свойства java.rmi.server.hostname, но я не думаю, что это также доступно в моем случае, потому что сервер использует TCP.

Вот код, который инициализирует сервер:

 Settings settings = Controller.getInstance().getModel().getSettings();
            int port = settings.getHTTP_PORT();
            server = HttpServer.create(new InetSocketAddress(port), 20);

            String cachepath = settings.getCachepath();
            if(!cachepath.startsWith("/")) cachepath = "/" cachepath;
            server.createContext(cachepath, new HTTPServerHandler());
                            server.start();
  

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

Комментарии:

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

2. Откуда вы знаете, что переадресация правильная? Используйте Wireshark для проверки потока пакетов как на клиенте, так и на сервере.

3. Я знаю, что он правильно перенаправлен, потому что я запустил другой сервер на этом порту, и этот сервер работает даже внешне.

4. Я также создал простой эхо-сервер TCP, и возникла та же проблема… Нужно ли мне что-либо настраивать на Java?

5. Я попытался подключиться к серверу с моего маршрутизатора. Это работает, так что, похоже, это блокирует только внешние IP-адреса.

Ответ №1:

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