2009-06-24 3 views
2

У меня есть приложение Java, которое создает сокетсер в порту. Я тестирую свое приложение на компьютере с Windows и работает правильно, но когда я тестирую его в Linux-машине, порт не прослушивает.Открытый порт в linux с java-приложением

Есть ли способ открыть порт специально для Linux-машины?

Я запускаю команду «netstat», а порт, который я использую в своем приложении, не отображается. Это не исключение. Я пытаюсь подключиться с другой машины к приложению, и соединение будет отклонено.

С уважением, я не знаю, почему он не работает ...

помогите пожалуйста.

спасибо, Дэвид

+1

Нет никакой разницы между 2. Покажите нам свой код, чтобы увидеть, что вы пытаетесь сделать. – tddmonkey

+0

Единственное различие заключается в том, что в машине Windows я запускаю «.jar», а в машине linux я запускаю «. sar ", но это не влияет на тип операционной системы, но в jboss. – 2009-06-24 11:47:59

+0

Если вы не можете прослушивать указанный порт, серверный сокет выкинет исключение, у вас есть это исключение? Или, если вы слушаете все в порядке, netstat должен показать порт, который вы слушаете. –

ответ

0

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

Редактировать: Возможно, ваш код успешно привязан к порту, но брандмауэр Linux блокирует входящие соединения?

Редактировать 2: Возможно, ваша конфигурация Linux JBoss отличается и ваш код, который содержит инициализацию для ServerSocket, не выполняется автоматически.

+0

проблема не в моем коде, потому что она работает в Windows-машине. Брандмауэр не является проблемой, потому что у него его нет. – 2009-06-24 11:37:01

3

Каков номер порта, который вы пытаетесь открыть?

Если это ниже 1024, тогда только пользователь root может открыть его или предоставить ему доступ.

+0

номер порта 1234. Я пользователь root – 2009-06-24 11:11:50

1

Не должно быть разницы в Windows и Linux. Можете ли вы опубликовать исключение-stacktrace, которое вы, скорее всего, получите?

Возможные варианты: ваш выбранный порт уже занят (в Linux обычно работают некоторые службы) или вы пытаетесь связать порт ниже 1024, что разрешено только для root.

+0

не вызывает никаких исключений – 2009-06-24 11:33:06

0

использовать netstat -napt для проверки (я не знаю, какие аргументы вы использовали).

+0

Я использую «netstat -na» и «netstat -na | grep 1234» – 2009-06-24 11:32:21

+0

любые правила iptables? – Aif

0

Как и Йохан Бурет, если вы пытаетесь открыть порт ниже 1024, вам придется запускать свою программу как root или sudo.

если вы используете дистрибутив как Ubuntu, где Вы не корень и корень не позволили сделать следующее: SUDO Java SocketServer

, если вы являетесь постоянным пользователем и может су к корневым фетровой шляпой/дистрибутивы RedHat на основе запустить этот: су - (запрос пароля суперпользователя) Java SocketServer

+0

Я попробовал, но он выбрасывает «ClassNotFoundException: SocketServer» – 2009-06-24 11:40:23

+0

Используете ли вы Sun Java или gcj? gcj - это реализация Java с открытым исходным кодом, с которой у меня всегда были проблемы. Попробуйте установить Java jdk и jre. – hacintosh

+0

Вы имеете в виду java.net.ServerSocket правильно? – akarnokd

0

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

Вы также можете использовать Telnet для проверки порта открыт или нет

telnet localhost 1234 

(даст отказ в соединении, если порт не открыт)

2

Вы уверены, что ваш код фактически выполняется ? Ваш комментарий о том, что код находится в файле .sar, подразумевает, что вы не выполняете его напрямую, а развертываете его в jboss. Может быть, он не развернут правильно? Вы пытались помещать несколько операторов регистрации (или даже System.out.println операторов) до и после создания ServerSocket?

0

Я подозреваю, что JBoss SAR неправильно настроен для запуска вашего сервера. Попробуйте следующее:

  • Запустите файл JAR из командной строки Linux (как вы успешно иметь на Windows)
  • Установите файл РПП в установку Windows, JBoss и посмотреть, если вы получите тот же вопрос, как на Linux
0

Ответ на этот старый пост; в интересах новых желающих.

Аналогичная проблема сталкивается с одним из членов моей команды. Не знаете, какова может быть ваша конкретная проблема; для нас проблема была маленькой и глупой. Разделитель путей для Unix - это двоеточие «:», а для окон - «двоеточие» «;». При вызове java-процесса сервера сокетов из приложения java обязательно используйте java.io.File.pathSeparator, чтобы код RunTime работал как в среде Windows, так и в Unix.

Смежные вопросы