Открыть порт в Linux с помощью Java-приложения
У меня есть Java-приложение, которое создает сокет-сервер в порту. Я тестирую свое приложение на машине с Windows и работает правильно, но когда я тестирую его на машине с Linux, порт не прослушивает.
Есть ли способ открыть порт специально на машине с Linux?
Я запускаю команду netstat, и порт, который я использую в своем приложении, не отображается. Это не исключение. Я пытаюсь подключиться с другой машины к приложению, и в соединении отказано.
С уважением, я не знаю, почему это не работает...
Помогите, пожалуйста.
спасибо Дэвид
10 ответов
Какой номер порта вы пытаетесь открыть?
Если оно ниже 1024, то только пользователь root может открыть его или предоставить доступ к нему.
Вы уверены, что ваш код на самом деле выполняется? Ваш комментарий о коде в .sar
Файл подразумевает, что вы не выполняете его напрямую, а развертываете его в jboss. Может быть, он неправильно развернут? Вы пытались поместить некоторые заявления о регистрации (или даже System.out.println
заявления) до и после создания ServerSocket?
Там не должно быть никакой разницы в Windows и Linux. Можете ли вы опубликовать исключительную трассировку стека, которую вы, скорее всего, получите?
Возможны следующие вероятности: выбранный вами порт уже занят (в Linux обычно работают некоторые службы) или вы пытаетесь привязать порт ниже 1024, который разрешен только для пользователя root.
Вы пытались подключиться с той же машины, чтобы исключить проблемы с брандмауэром?
Вы также можете использовать telnet, чтобы проверить, открыт порт или нет
telnet localhost 1234
(выдаст соединение отказано, если порт не открыт)
Как сказал Йохан Буре, если вы пытаетесь открыть порт ниже 1024, вам придется запускать вашу программу как root или sudo.
если вы используете дистрибутив, такой как Ubuntu, где вы не являетесь пользователем root и root не включен, выполните следующие действия: sudo java SocketServer
если вы обычный пользователь и можете использовать su для корневых дистрибутивов на основе fedora/redhat, выполните следующее: su - (запрос пароля root) java SocketServer
Я подозреваю, что JBoss SAR не настроен правильно для запуска вашего сервера. Попробуйте следующее:
- Запустите файл JAR из командной строки Linux (как вы успешно в Windows)
- Установите файл SAR в установку Windows JBoss и посмотрите, возникает ли такая же проблема, как в Linux
Это должно работать так же. Выдает ли исключение на Linux? Возможно целевой порт уже занят.
Изменить: Может быть, ваш код успешно привязан к порту, но брандмауэр Linux блокирует входящие соединения?
Изменить 2: Возможно, ваша конфигурация Linux JBoss отличается, и ваш код, который содержит инициализацию для ServerSocket, не выполняется автоматически.
SELinux включен? Попробуйте отключить его: http://www.crypt.gen.nz/selinux/disable_selinux.html
Используйте netstat -napt для проверки (я не знаю, какие аргументы вы использовали).
Отвечая на этот старый пост; в пользу новичков.
С подобной проблемой столкнулся один из членов моей команды. Не уверен, что ваша конкретная проблема может быть; для нас проблема была маленькой и глупой. Разделитель пути для Unix - это двоеточие ":", а для окон - точка с запятой ";". При вызове java-процесса сервера сокетов из приложения java обязательно используйте java.io.File.pathSeparator, чтобы код RunTime работал как в среде Windows, так и в среде Unix.