it-swarm.com.de

es wurde versucht, auf einen Socket zuzugreifen, der durch seine Zugriffsberechtigungen verboten ist. Warum?

 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);
        }
    }

Ich verstehe nicht warum ... es hat funktioniert und jetzt funktioniert es nicht. Könnte mir jemand helfen? Ich streame mit vlc, und ich möchte die Pakete nicht erhalten, einige Berichte erstellen und dann lokal an einen Spieler weiterleiten 

32
andrew

Höchstwahrscheinlich wird der Socket von einem Prozess gehalten. Verwenden Sie netstat -o, um den zu finden.

38
stark

Laden Sie Visual Studio mit Administratorrechten erneut. Mit Windows Sockets (WinSock) können Sie kein SocketType.RAW-Socket ohne lokales Admin erstellen. Denken Sie daran, dass Ihre Lösung erhöhte Berechtigungen benötigt, um wie erwartet auszuführen!

37
Jonathan

Ich verstehe nicht einmal den Schuldigen dieses Problems. In meinem Fall ist das Problem jedoch völlig anders. Ich habe versucht, netstat -o oder netstat -ab auszuführen. Beide zeigen an, dass derzeit keine App an Port 62434 empfangsbereit ist. Dies ist diejenige, auf die meine App zu hören versucht. Es ist also wirklich verwirrend für mich.

Ich habe gerade versucht, an das zu denken, was ich gemacht hatte, damit es nicht mehr funktioniert (es hat vorher funktioniert). Nun, ich dachte an die Internetfreigabe, die ich auf meinem Ethernet-Adapter mit einem privaten virtuellen LAN (mit Hyper-v in Windows 10) vorgenommen hatte. Ich musste nur das Teilen deaktivieren und es funktionierte wieder einwandfrei.

Hoffe, das hilft jemandem, der das gleiche Problem hat. Und wenn jemand dies erklären könnte, fügen Sie bitte Ihrer Antwort mehr Details oder vielleicht etwas Kommentar zu meiner Antwort hinzu.

10
Hopeless

Dieses Problem hatte ich beim Versuch, ein Dotnet-Core-Projekt mit Dotnet-Run zu starten, als versucht wurde, an den Port zu binden.

Das Problem wurde dadurch verursacht, dass eine Visual Studio 2017-Instanz mit geöffnetem Projekt ausgeführt wurde. Ich hatte das Projekt zuvor über VS zum Debuggen gestartet und scheint sich an dem Port zu halten, obwohl das Debugging abgeschlossen war und die Anwendung geschlossen war .

Durch Schließen der Visual Studio-Instanz und erneutes Ausführen von "dotnet run" wurde das Problem behoben.

4
Gareth

Dies ist der Fehler, der zurückgegeben wird, wenn die Windows-Firewall den Port blockiert (ausgehend). Wir haben einen strengen Webserver, so dass die ausgehenden Ports standardmäßig blockiert sind. Ich musste nur eine Regel erstellen, um die Portnummer TCP in wf.msc zuzulassen. 

2
Rwt

Ich hatte ein ähnliches Problem, aber ich habe es durch einige Änderungen in der Firewall-Einstellung behoben.

Sie können den folgenden Schritten folgen

  1. Gehe zu "Start" -> "Systemsteuerung"
  2. Klicken Sie auf "Windows Firewall" enter image description here

  3. Klicken Sie in der Windows-Firewall auf "Ein Programm oder eine Funktion über die Windows-Firewall zulassen" enter image description here

  4. Klicken Sie nun innerhalb von Allow Programs auf "Change Settings". Nachdem Sie auf die Schaltfläche Einstellungen ändern geklickt haben, wird die Schaltfläche "Ein anderes Programm zulassen" aktiviert . enter image description here

  5. Klicken Sie auf die Schaltfläche "Anderes Programm zulassen". Ein neues Dialogfeld wird geöffnet. Wählen Sie die Programme oder Anwendungen aus, für die Sie die Socket-Ausnahme erhalten, und klicken Sie auf "Hinzufügen" . enter image description here

  6. Klicken Sie auf OK und starten Sie Ihren Computer neu.

  7. Versuchen Sie, Ihre Anwendung (mit einer Ausnahme) mit Administratorrechten auszuführen.

Ich hoffe das hilft.

Frieden,

Sunny Makode

1
Sunny656

Ich hatte den gleichen Fehler, als ich zwei verschiedene ASP.net-Projekte in zwei verschiedenen Visual Studio-Instanzen hatte.
Das Schließen eines von ihnen behebt das Problem.

0
wip

Ich bekam einen sehr ähnlichen Fehler, als mein Computer auf die Erweiterung zum Windows 10-Jubiläum aufgerüstet wurde und alle meine Einstellungen effektiv zerstört wurden. Es war, als würde man mit einem neuen Computer arbeiten, alles für die erstmalige Verwendung einrichten ... und dann bekam ich plötzlich diese Fehlermeldung, als mein Code versuchte, einen Webdienst zu verwenden.

Aber der wahre Schuldige und die Lösung in meinem Fall war, dass ich die Option zum Ausführen in 64-Bit aktivieren musste. Diese Wahl war in meinem Fall verloren gegangen.

Extras -> Optionen -> Projekte und Lösungen -> Webprojekte -> "Verwenden Sie die 64-Bit-Version von IIS Express für Websites und Projekte".

0
Greg

Das Ausführen von iisreset in einem Befehlsfenster hat es für mich behoben.

0
MFry