尝试通过其访问权限以某种方式访问​​套接字forbbiden.为什么?

and*_*rew 46 c# sockets video streaming

 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);
        }
    }
Run Code Online (Sandbox Code Playgroud)

我不明白为什么......它有效,现在却没有.有人能帮助我吗?我正在使用vlc进行流式传输,我不会收到数据包,做一些报告,然后在本地重新播放一个播放器

sta*_*ark 52

套接字很可能是由某个进程持有的.使用netstat -o找出哪一个.

  • 它实际上是`netstat -ao`,包括可以监听的端口,或者`netstat -ano`,如果你想节省DNS查询,或者`netstat -ano | 找到":80"`来过滤,例如通过端口#80 (7认同)
  • Sysinternals [TCPView](http://technet.microsoft.com/en-us/sysinternals/bb897437.aspx)对于检查是否被另一个进程使用也很有帮助(正如我刚刚遇到的那样) (4认同)
  • 遗憾的是,在我的情况下,我的应用程序尝试侦听端口 62434,但使用 `netstat -o` 检查侦听端口显示当前没有任何应用程序占用该端口。这真的让我发疯。 (4认同)
  • 它也可能在排除范围内,请使用“netsh interface ipv4 show exceptedportrange protocol=tcp”进行检查 (4认同)

Par*_*rsa 47

我重新启动了此服务:Host Network Service在 WindowsServices程序上。它奏效了。

感谢@admin,您可以在 Windows 终端中运行这些命令:

net stop hns
net start hns
Run Code Online (Sandbox Code Playgroud)

  • 为我工作`net stop hns &amp;&amp; net start hns` (7认同)
  • 你用码头工人吗?我在某处读到 docker 导致了这个问题 (4认同)
  • @Parsa 谢谢伙计!真的吗!我曾经重新启动以使其工作并重置 tcp/ip 堆栈。是的,我用docker,就是因为docker。您的解决方案节省了我很多时间。 (4认同)
  • 当涉及到 Windows 重新启动时,事情总是有效的 :) (4认同)
  • 如果出现“发生系统错误 5”。键入这些命令时,只需以管理员身份打开终端(来源:https://www.lifewire.com/how-to-fix-system-error-5-has-occurred-on-windows-4770868) (4认同)
  • 经过几个小时的尝试找出为什么 CaddyServer 在某一特定配置下不再启动后,这是正确的解决方案。关于为什么这项服务会导致如此神秘的问题有什么想法吗? (2认同)
  • 为我的案子工作 (2认同)
  • 我必须说我时不时地回到这个答案,这个解决方案总是有效的:) (2认同)

小智 39

使用管理员权限重新加载Visual Studio.Windows套接字(WinSock)将不允许您创建没有本地管理员的SocketType.RAW套接字.请记住,您的解决方案需要提升权限才能按预期运行!

  • 然而,接受的答案并没有解释为什么异常发生在CREATE.它可以解释为什么在BIND发生异常. (14认同)
  • @pquest - 完全不同意你的评论 - 这个答案实际上是非常有用的,并且会处理主要答案中根本没有解决的某种情况.我投了赞成票. (12认同)
  • 解决问题的另一种方式可能会出现问题,尤其是可能由多种不同情况引起的错误消息 (4认同)

Hop*_*ess 17

好吧,我甚至不明白这个问题的罪魁祸首.但就我而言,问题完全不同.我已经尝试过运行,netstat -o或者netstat -ab都显示当前没有任何应用程序正在侦听端口62434,这是我的应用程序试图侦听的应用程序.所以这对我来说真的很困惑.

我只是试着想一想我做了什么让它停止工作(之前确实有效).那么我想到了我在以太网适配器上使用私有虚拟局域网(在Windows 10中使用Hyper-v)进行的Internet共享.我只需要关闭共享,它再次正常工作.

希望这有助于其他人遇到同样的问题.当然,如果有人可以解释这一点,请在您自己的答案中添加更多细节,或者作为对我的答案的一些评论.

  • 谢谢你!对我来说,事实证明是我建立的 VPN 连接影响了此问题的出现。 (3认同)
  • Hyper-v已在我的PC上创建了很多交换机,删除了我使用的所有交换机(但2交换机除外),然后一切又按预期工作了! (3认同)
  • 也使用类似的端口范围,这让我觉得也许连接共享选项无形中使用了几个不同的端口范围,而没有将其报告给 netstat 工具。 (2认同)

Dan*_*ose 14

当一个进程使用某个端口时,该端口就不能被其他进程使用。netstat -o显示进程正在使用的端口。

或者,也可以排除端口的使用。在这种情况下,没有进程可以使用它们。您可以通过以下方式查看列表netsh interface ipv4 show excludedportrange protocol=tcp


Sun*_*nny 10

我遇到了类似的问题,但我通过对防火墙设置进行一些更改来解决它。

您可以按照以下步骤操作

  1. 转到“开始”-->“控制面板”

  2. 单击“Windows 防火墙” 在此输入图像描述

  3. 在 Windows 防火墙内,单击“允许程序或功能通过 Windows 防火墙” 在此输入图像描述

  4. 现在在“允许程序”中,单击“更改设置”按钮。单击“更改设置”按钮后,“允许另一个程序...”按钮将启用。 在此输入图像描述

  5. 当您单击“允许另一个程序...”按钮时,将出现一个新对话框。选择您收到套接字异常的程序或应用程序,然后单击“添加”按钮。

在此输入图像描述

  1. 单击“确定”,然后重新启动计算机。

  2. 尝试使用管理权限运行您的应用程序(有例外)。

我希望这有帮助。


Rob*_*Rob 9

我自己也遇到了这个问题,阅读这篇文章后找到了原因:

https://ardalis.com/attempt-made-to-access-socket/

简而言之,当我使用该命令时:

netsh interface ipv4 show excludedportrange protocol=tcp
Run Code Online (Sandbox Code Playgroud)

它显示我尝试使用的端口已被保留;所以我只是选择了另一个端口(一个未保留的端口)并且它起作用了。


Gar*_*eth 8

当尝试使用dotnet run尝试绑定到端口时启动dotnet Core项目时,遇到了这个问题。

该问题是由于在项目打开的情况下运行Visual Studio 2017实例引起的-我之前曾通过VS启动该项目以进行调试,尽管调试已完成并且该应用程序似乎已关闭,但该项目似乎仍保留在端口上。

关闭Visual Studio实例并运行“ dotnet run”再次解决了该问题。


小智 7

以管理员身份运行终端,然后运行以下命令:

net stop hns
net start hns
Run Code Online (Sandbox Code Playgroud)


小智 5

这是当 Windows 防火墙阻止端口(传出)时返回的错误。我们有严格的网络服务器,因此默认情况下会阻止传出端口。我所要做的就是创建一条规则以允许 wf.msc 中的 TCP 端口号。


Fin*_*led 5

我正在开发一个连接到 LAN 中的 MQTT 代理的 UWP 应用程序。我遇到了类似的错误。

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
Run Code Online (Sandbox Code Playgroud)

结果我忘了给应用程序提供正确的功能...... 在此输入图像描述


Tow*_*hin 5

IIS 是我的罪魁祸首。我的 IIS 正在运行,它禁止打开任何新的套接字连接。通过运行命令“ iisreset -stop”来停止 IIS 为我解决了问题


小智 5

原因很可能是由于 Windows 更新限制了对 Windows 计算机上某些端口的访问。您可以通过运行以下命令查看从用户中排除的端口列表:netsh interface ipv4 show excludedportrange protocol=tcp

就我而言,更改端口后,一切正常。