an attempt was made to access a socket in a way forbbiden by its access permissions. why?
private void StartReceivingData(string ipAddress, int iPort)
{
try
{
if (!_bContinueReciving)
{
//initializeMainSocket(ipAddress, iPort);
_mSocket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);//<------HERE IS RAISED THE EXCEPTION
_mSocket.Bind(new IPEndPoint(IPAddress.Parse(ipAddress), iPort));
// _mSocket.Bind(new IPEndPoint(IPAddress.Loopback, iPort));
_mSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, true);
_mSocket.IOControl(IOControlCode.ReceiveAll, new byte[4] { 1, 0, 0, 0 }, new byte[4] { 0, 0, 0, 0 });
//var 1
_mSocket.BeginReceive(_buffReceivedData, 0, _buffReceivedData.Length, SocketFlags.None,
new AsyncCallback(OnReceive), null);
initializeLocalSocket();
}
else
{
_bContinueReciving = false;
_mSocket.Close();
}
}
catch (Exception exception)
{
Debug.WriteLine(exception);
}
}
Я не понимаю, почему... это сработало, а теперь нет. кто-нибудь может мне помочь? я транслирую с VLC, и я не хочу получать пакеты, делать некоторые отчеты, а затем пересылать локальный игроку
26 ответов
Скорее всего сокет удерживается каким-то процессом. использование netstat -o
чтобы найти какой.
Я перезапустил эту службу:
Host Network Service
на окнах
Services
программа. И это сработало.
Перезагрузите Visual Studio с правами администратора. Windows Sockets (WinSock) не позволит вам создать SocketType.RAW Socket без локального администратора. И помните, что вашему решению понадобятся повышенные привилегии для запуска, как и ожидалось!
Ну, я даже не понимаю виновника этой проблемы. Но в моем случае проблема совершенно иная. Я пробовал бегать netstat -o
или же netstat -ab
оба показывают, что на данный момент нет порта для прослушивания через порт 62434, который пытается прослушать мое приложение. Так что это действительно смущает меня.
Я просто попытался подумать о том, что я сделал, чтобы он перестал работать (он работал раньше). Ну, тогда я подумал о совместном использовании Интернета, которое я сделал на своем адаптере Ethernet с частной виртуальной локальной сетью (используя Hyper-v в Windows 10). Мне просто нужно было отключить обмен, и все снова заработало.
Надеюсь, что это помогает кому-то еще с той же проблемой. И, конечно, если кто-то может объяснить это, пожалуйста, добавьте больше подробностей в свой ответ или, возможно, в качестве комментария к моему ответу.
IIS был для меня главным преступником. Моя ISS была запущена и не позволяла открывать любые новые сокетные соединения. Проблема решена для меня остановкой IIS с помощью команды "iisreset -stop
"
Когда процесс использует порт, он не может использоваться другим процессом.
netstat -o
показывает порты, используемые процессом.
В качестве альтернативы порты также могут быть исключены из использования. В этом случае ни один процесс не сможет их использовать. Вы можете увидеть список через
netsh interface ipv4 show excludedportrange protocol=tcp
У меня была эта проблема, когда я пытался запустить проект ядра dotnet с помощью запуска dotnet, когда он пытался привязаться к порту.
Проблема была вызвана тем, что экземпляр Visual Studio 2017 работал с открытым проектом - я ранее запускал проект с помощью VS для отладки, и кажется, что он держался за порт, даже если отладка была завершена, и приложение казалось закрытым,
Закрытие экземпляра Visual Studio и запуск "запуска по сети" снова решили проблему.
У меня была похожая проблема, но я исправил ее, внеся некоторые изменения в настройки брандмауэра.
Вы можете выполнить следующие шаги
- Перейти в "Пуск" -> "Панель управления"
В брандмауэре Windows нажмите "Разрешить программу или функцию через брандмауэр Windows"
Теперь внутри Разрешить программы, нажмите на кнопку "Изменить настройки". После нажатия кнопки "Изменить настройки" кнопка "Разрешить другую программу" становится активной.
Нажмите кнопку "Разрешить другую программу...", откроется новое диалоговое окно. Выберите программы или приложения, для которых вы получаете исключение сокета, и нажмите кнопку "Добавить".
Нажмите кнопку ОК и перезагрузите компьютер.
Попробуйте запустить ваше приложение (которое имеет исключение) с правами администратора.
Надеюсь, это поможет.
Мир,
Солнечный Макоде
Я сам столкнулся с этим, нашел причину после прочтения этого поста:
https://ardalis.com/attempt-made-to-access-socket/
короче, когда я использовал команду:
netsh interface ipv4 show excludedportrange protocol=tcp
он показал, что порт, который я пытался использовать, зарезервирован; поэтому я просто выбрал другой порт (который не был зарезервирован), и все заработало.
Запустите терминал от имени администратора, затем выполните следующее:
net stop hns
net start hns
Я разрабатываю приложение UWP, которое подключается к брокеру MQTT в локальной сети. Хожу аналогичная ошибка.
MQTTnet.Exceptions.MqttCommunicationException: 'An attempt was made to access a socket in a way forbidden by its access permissions [::ffff:xxx.xxx.xxx.xxx]:1883'
ExtendedSocketException: An attempt was made to access a socket in a way forbidden by its access permissions [::ffff:xxx.xxx.xxx.xxx]:1883
Оказалось, что я забыл дать приложению правильные возможности...
Причина, скорее всего, связана с Центром обновления Windows, который ограничил доступ к определенным портам на компьютерах с Windows. Вы можете просмотреть список портов, которые исключены из вашего пользователя, выполнив эту команду:netsh interface ipv4 show excludedportrange protocol=tcp
В моем случае после смены портов все работает нормально.
Это ошибка, которая возвращается, когда брандмауэр Windows блокирует порт (исходящий). У нас строгий веб-сервер, поэтому исходящие порты по умолчанию заблокированы. Все, что мне нужно было сделать, это создать правило, разрешающее номер порта TCP в файле wf.msc.
Я столкнулся с этим в веб-приложении в Azure при попытке подключиться к хранилищу BLOB-объектов. Проблема оказалась в том, что я пропустил развертывание строки подключения для хранилища BLOB-объектов, поэтому она все еще указывала на эмулятор хранилища. В клиенте должна быть встроена логика повторных попыток, потому что я видел около трех попыток. В/devstorageaccount1
вот мертвая распродажа.
Исправлено путем правильной настройки строки подключения в Azure.
Я решил просто остановить установленную версию службы, которая работала на машине, используя тот же порт.
В качестве альтернативы запустите экземпляр отладки с другим портом.
Как отмечает Гоннагл , это может быть вызвано наличием установленного VPN-клиента в подключенном состоянии. Для нас отключение от VPN решило проблему.
У меня была такая же ошибка, когда у меня было два разных проекта ASP.net в двух разных экземплярах Visual Studio.
Закрытие одного из них устранило проблему.
Я попробовал все, что предлагали другие: порт еще не использовался, с правами администратора у меня была та же ошибка, пробовал с cygwin и wsl, но безуспешно. Наконец я запустил его с использованием порта > 5000, например 5050, теперь права администратора не нужны.
У меня только что была аналогичная проблема из приложения Xamarin Forms, которое совершало исходящий вызов в Azure через HttpClient.
В моем случае основной причиной проблемы оказался мой пакет безопасности BitDefender, блокирующий исходящий доступ для моего приложения, потому что он считал это угрозой.
Я добавил исключение в брандмауэр для этого приложения, и проблема была решена.
К сожалению, это довольно распространенная проблема в веб-приложениях .NET Core или .NET 5+, обычно в тех, которые пытаются запустить https (SSL). Быстрая и грязная работа, не требующая перезапуска IIS, — это изменить порт в файле launchSetting.json . Имейте в виду, что это, вероятно, просто проблема на вашем компьютере, поэтому вы можете не захотеть регистрировать это изменение в системе управления версиями.
Я начал получать очень похожую ошибку, когда мой компьютер обновился до Windows 10 и добавил все мои настройки. Это было похоже на работу с новым компьютером, настройку всего для первого использования... и вдруг я получил эту ошибку, когда мой код пытался использовать веб-сервис.
Но настоящий виновник, и решение в моем случае состояло в том, что мне нужно было проверить опцию для запуска в 64-битной версии. Этот выбор был потерян в моем случае.
Сервис -> Параметры -> Проекты и решения -> Веб-проекты -> "Использовать 64-разрядную версию IIS Express для веб-сайтов и проектов".
Я получил эту ошибку, потому что мое приложение ASP.NET Core прослушивает порты 80/443 для выпускных сборок и другие порты для отладочных сборок. Конечно, используяnetstat
на портах сборки отладки было показано, что порты не используются, поэтому я был так сбит с толку. Порты 80/443, очевидно, будут использоваться кем-то еще на вашем компьютере, поэтому просто убедитесь, что вы не пытаетесь использовать эти порты, иначе вы получите то же сообщение об ошибке, и ничто другое вам не поможет!
Откройте IIS (Запуск от имени администратора) -> Перейдите на сайты -> Сайты по умолчанию -> Привязки -> Проверьте дополнительный порт, если он найден, затем удалите его.
После этого перезагрузите сервер IIS, нажав кнопку «Перезагрузить»:
Сначала нажмите Win+R, чтобы открыть диалоговое окно «Выполнить», затем введите CMD и одновременно нажмите Ctrl+Shift+Enter, чтобы убедиться, что вы открываете командную строку от имени администратора.
Затем введите «netstat -aon|findstr «8080»», чтобы проверить, какой процесс использует порт 8080.
Затем используйте «taskkill /pid 4 -t -f», чтобы завершить процесс. Если у вас возникли трудности с завершением PID 136 (который принадлежит подпроцессу PID 4), причиной может быть сообщение об ошибке «Доступ запрещен».
Наконец, введите «net stop http» и при появлении запроса введите «Y», чтобы освободить порт 8080 для повторного использования. введите сюда описание изображения