ServerSocket, Tomcat как сервис и порт - PullRequest
1 голос
/ 12 января 2011

У меня есть приложение (Java), которое поставляет встроенный Jetty. По умолчанию я пытаюсь получить порт 8080 для сервера Jetty. Если порт используется, я выбираю случайный:

try {
    socket = new ServerSocket(def);
} catch (IOException e) {
    socket = new ServerSocket(0);
}

Проблема в том, что у меня есть клиент, который запускает Tomcat на 8080. Если tomcat закрыт, все в порядке. Если Tomcat работает как служба, и мое приложение хочет получить порт, оно получает порт по умолчанию (8080), хотя tomcat прослушивает там. Если просмотреть localhost: 8080 / test.html, я получу http 404 от Tomcat.

Так что почему-то кажется, что tomcat спит, пока нет реального запроса на порт 8080.

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

С уважением

Ответы [ 3 ]

1 голос
/ 12 января 2011

Вы уже справились с проблемой ...

Но вы могли бы справиться с ней лучше с помощью команды "taskkill.exe" (если вы нашли PID с помощью "tasklist.exe" ранее).

1 голос
/ 12 января 2011

Измените либо Tomcat, либо Jetty, чтобы использовать другой порт.Один слушатель на порт.

0 голосов
/ 12 января 2011

Ваша проблема в том, что два приложения конкурируют за системный ресурс, который в вашем случае является TCP-портом 8080. Чтобы освободить порт, вам придется работать с системным API (widnows или linux или ...), на которомДело в том, что вы оставляете независимость Java позади.Единственный способ, которым я вижу эту работу (хотя не веб-серверы), - это сказать системе найти процесс, который в данный момент удерживает порт, и приостановить его на несколько секунд.Затем другой процесс автоматически запросит порт, как только будет сделан запрос на него.Тем не менее, это грязное решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...