У меня сейчас интересная проблема. На Windows Server 2012 R2 у меня есть два IP-адреса, например 192.0.2.1
и 192.0.2.2
. По одному адресу, например 192.0.2.1
веб-сервер работает на порту 80
, который реализован на C # с использованием HttpListener
. По другому адресу, например 192.0.2.2
Я пытаюсь открыть порт 80
используя программу Go и http.server{}
. Программа Go получает сообщение об ошибке, что порт не открывается. Программа C # запускается первой. Запускаю программу Go с правами администратора.
Когда я использую netstat
чтобы проверить, какие порты на каких адресах используются, второй адрес 192.0.2.2
полностью не используется. Порт 80
открывается только программой C # по первому адресу, т.е. 192.0.2.1
.
В этом нет никакого смысла. Я что-то упускаю?
Две недели назад у меня был похожий сценарий с Ubuntu и двумя программами Go, обе использовали порт 443
на разных IP-адресах. Это не было проблемой и сразу же побежало.
Веб-сервер необходимо настроить для привязки только к предполагаемому IP-адресу. Если он настроен для привязки к любому адресу, вы не можете использовать тот же порт с любым другим адресом.
Простой netstat
только отображает связано Розетки. Вам нужно использовать -a
для отображения прослушивающих, возможно, неподключенных портов. Любой порт, выделенный для прослушивания, нельзя использовать по-другому. С помощью -ao
также удобен, поскольку он отображает PID рядом с портом.