Как ServerSocket может получать HTTP-запросы? - PullRequest
0 голосов
/ 30 октября 2018

Я реализовал простую клиент-серверную программу с использованием сокетного программирования. Вот мой фрагмент кода сервера,

ServerSocket listner = new ServerSocket(9000);
while(true){
Socket socket = listner.accept();
// here a new thread is spawn for each request Which prints 
// the data received from client using socket input stream
}

Когда сервер работает и URL (http://localhost:9000) получен из браузера, я вижу, что запрос HTTP get печатается на консоли.

Насколько я знаю, HTTP прослушивает порт 80 (т. Е. Все входящие HTTP-запросы поступают через этот порт). У меня такой вопрос: почему http-запросы принимаются через порт 9000. Если URL-адрес, который я использую, указывает игнорировать (или, может быть, мимоходом) порт 80? Затем, как реализовать серверную программу с использованием сокетов, которые слушают стандартный порт HTTP: 80 (я имею в виду, htting URL http://localhost/).

1 Ответ

0 голосов
/ 30 октября 2018

Хотя HTTP-порт по умолчанию равен 80, ничто не мешает вам использовать другой порт. На самом деле обычно используются и другие порты, такие как 8080 и более высокие номера, которые не конфликтуют со стандартными номерами портов, используемыми для других приложений (электронная почта и т. Д.)

Ваш пример сработал, потому что вы слушаете порт 9000 из-за этой строки:

ServerSocket listner = new ServerSocket(9000);

Соответствующий URL, который вы использовали в своем браузере, был: http://localhost:9000

Так что браузер явно указывал использовать 9000, а не 80.

Если вы хотите использовать 80, просто измените номер порта на 80 из этой строки в конструкторе ServerSocket, предполагая, что больше ничего не использует порт 80 в том же сетевом интерфейсе.

...