#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:
Кажется, сервер, к которому я пытался подключиться, был единственным случаем, когда соединения с сокетами были заблокированы. Я попросил кого-то другого подключиться к нему, и это сработало.