尝试以其访问权限禁止的方式访问套接字。为什么?

时间:2012-05-05 11:11:25

标签: 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);
        }
    }

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

13 个答案:

答案 0 :(得分:43)

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

答案 1 :(得分:37)

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

答案 2 :(得分:15)

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

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

net stop hns
net start hns

答案 3 :(得分:14)

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

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

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

答案 4 :(得分:6)

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

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

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

答案 5 :(得分:2)

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

答案 6 :(得分:1)

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

您可以按照以下步骤

  1. 转到“开始” - &gt; “控制面板”
  2. 点击“Windows防火墙” enter image description here

  3. 在Windows防火墙内,单击“通过Windows防火墙允许程序或功能” enter image description here

  4. 现在在允许程序内,单击“更改设置”按钮。单击“更改设置”按钮后,将启用“允许其他程序...”按钮。 enter image description here

  5. 点击“允许其他程序...”按钮,将打开一个新对话框。选择要获得套接字例外的程序或应用程序,然后单击“添加”按钮。 enter image description here

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

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

  8. 我希望这会有所帮助。

    和平

    Sunny Makode

答案 7 :(得分:0)

当我的电脑升级到Windows 10周年纪念日时,我开始收到一个非常类似的错误,并且有效地消除了我的所有设置。这就像使用新计算机,第一次使用所有内容一样...然后我的代码试图使用Web服务时突然出现此错误。

但真正的罪魁祸首,我的案例中的解决方案是我需要检查以64位运行的选项。这种选择在我的案例中已经丢失。

工具 - &gt;选项 - &gt;项目和解决方案 - &gt;网络项目 - &gt; &#34;将64位版本的IIS Express用于网站和项目&#34;。

答案 8 :(得分:0)

在命令窗口中运行iisreset为我修复了该问题。

答案 9 :(得分:0)

当我在两个不同的Visual Studio实例中拥有两个不同的ASP.net项目时,发生了相同的错误。
关闭其中一个即可解决此问题。

答案 10 :(得分:0)

尝试连接到Blob存储时,我在Azure上的Web应用程序中遇到了此问题。问题原来是我错过了为Blob存储部署连接字符串,因此它仍然指向存储模拟器。客户端必须内置一些重试逻辑,因为我看到了3次尝试。 /devstorageaccount1简直就是死了。

enter image description here

通过在Azure中正确设置连接字符串来解决。

答案 11 :(得分:0)

我正在开发一个UWP应用程序,该应用程序连接到LAN中的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

原来,我忘记给该应用提供正确的功能了... enter image description here

答案 12 :(得分:0)

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