Исключение SocketException при вызове TcpListener.Start () - PullRequest
0 голосов
/ 26 марта 2019

Мне известно, что уже есть подобный вопрос здесь .Тем не менее, единственный ответ не решает мою проблему.

Вот мой код:

TcpListener TcpListener = new TcpListener(localaddr: IPAddress.Any, port: 8080);
TcpListener.Start();

Выполнение TcpListener.Start(); дало мне эту ошибку:

System.Net.Sockets.SocketException: «Была сделана попытка получить доступ к сокету способом, запрещенным его разрешениями на доступ»

Я уже определил правило безопасности входящего трафика в моем брандмауэре, чтобы сделать порт 8080общедоступный (я знаю, что это обычно не рекомендуется, но я временно делаю это для целей тестирования):

enter image description here

enter image description here

enter image description here

Когда я запускаю netstat -o, я могу проверить, что порт 8080 не уже имеетустановленное соединение.

Для чего это стоит, я запускаю TcpListener на виртуальной машине Azure.

Любые предложения о том, как я могу исправить SocketException?

ОБНОВЛЕНИЕ:

Когда я запускаю netstat -o -n -a | findstr 0.0.0.0:8080, я вижу следующий результат:

TCP 0.0.0.0: 8080 0.0.0.0:0 СЛУШАТЬ 4

Возможно, было выдано исключение SocketException, поскольку на порте 8080 уже прослушивается TcpListener?

Я пытался прекратить существующееTcpListener, запустив taskkill/pid 4 /F (чтобы увидеть, будет ли SocketException по-прежнему выбрасываться после его завершения), но не удалось:

ОШИБКА: процесс с PID 4 не можетбыть прекращено.Причина: доступ запрещен.

1 Ответ

0 голосов
/ 26 марта 2019

Неужели PID 4 действительно не установил сигнал тревоги до того, как вы попробовали TaskKill? Это необычно низко . В большинстве систем Windows, над которыми я работал, это был «процесс» системы, который является ОС.

Вероятно, что-то зарегистрировано, чтобы использовать этот порт как часть URL-адреса, зарезервированного через HTTP.SYS .

Если у вас запущен IIS, найдите сайты, которые работают на этом порту.

...