Tomcat, открой сокет - не работает - PullRequest
0 голосов
/ 28 сентября 2011

Мое веб-приложение должно общаться с устройством в моей локальной сети через сокет.Я пытаюсь открыть ServerSocket на порт> 45000 и прослушать его для входящих подключений.Класс, который реализует это, работал отлично, когда я разрабатывал его и запускал как автономный компонент, но он выдает исключение, когда я пытаюсь запустить его как часть моего веб-приложения под Tomcat.

Что я могу сделать, чтобы это исправить?Мне нужно прослушивать этот порт, и я получаю не HTTP-трафик, поэтому я не могу его прослушать, открыв его в файле config.xml.

Вот, в основном, код, который не работает: private void start() { ServerSocket s = 0; try { s = new ServerSocket(45678); // this is line 38 (see stacktrace) } catch (IOException e) { Misc.log("Could not listen on port: 45678.\n" + Misc.getStackTrace(e)); // System.exit(-1); } ... }

Вот трассировка стека:

Could not listen on port: 45634.
java.net.BindException: Address already in use: JVM_Bind
        at java.net.PlainSocketImpl.socketBind(Native Method)
        at java.net.PlainSocketImpl.bind(Unknown Source)
        at java.net.ServerSocket.bind(Unknown Source)
        at java.net.ServerSocket.<init>(Unknown Source)
        at java.net.ServerSocket.<init>(Unknown Source)
        at x.x.x.userland.logging.WebServer.start(WebServer.java:38)
        ...

Спасибо за вашу помощь.С наилучшими пожеланиями, Тимофей.

UPD добавлена ​​вершина трассировки стека.PS.он пишет, даже когда я запускаю его в первый раз

UPD 2 Оказывается, этот порт используется чем-то, что называется Coyote ...

INFO: Initializing Coyote HTTP/1.1 on http-80
28.09.2011 13:04:36 org.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on http-45634
28.09.2011 13:04:36 org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 267 ms

Iпостараюсь «уговорить» Койота не использовать его.Можно ли это сделать вообще?

1 Ответ

2 голосов
/ 28 сентября 2011

Не удалось прослушать порт: 45634. java.net.BindException: Адрес уже используется: JVM_Bind

Это означает, что порт используется.Может быть, с помощью отдельной программы, которую вы использовали для тестирования.Возможно, оно не было закрыто должным образом и потребуется время ожидания.

Попробуйте на данный момент использовать другой номер порта и убедитесь, что вы закрыли сокет, когда закончите.

...