134 votes

Une tentative a été faite pour accéder à un socket d'une manière interdite par ses autorisations d'accès. Pourquoi ?

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

Je ne comprends pas pourquoi...ça a marché et maintenant ça ne marchepas. Quelqu'un pourrait-il m'aider ? Je suis en streaming avec vlc, et je ne veuxpas recevoir les paquets, faire des rapports, et puis redessiner local à un joueur

245voto

Parsa Points 382

J'ai redémarré ce service : Host Network Service sur le programme windows Services. Et ça a marché.

Vous pouvez exécuter ces commandes dans le terminal Windows à la place, comme @admin mentionné dans la section commentaire :

net stop hns
net start hns

113voto

stark Points 4072

Très probablement la prise est tenue par un certain processus. Utilisez netstat -o pour trouver lequel.

58voto

Jonathan Points 579

Recharger Visual Studio avec les privilèges d'administrateur. Windows Sockets (WinSock) ne vous permettra pas de créer un SocketType.RAW Socket sans administrateur local. Et n'oubliez pas que votre solution aura besoin de privilèges élevés pour fonctionner comme prévu !

15voto

L'IIS était le principal délinquant pour moi. Mon IIS était en cours d'exécution et il empêche toute nouvelle connexion de socket de s'ouvrir. Le problème a été résolu pour moi en arrêtant IIS en exécutant la commande "iisreset -stop"

En plus de cela, si vous utilisez Docker, Docker pourrait être la cause de ce problème. Si c'est le cas, vous devez redémarrer le Service réseau hôte en exécutant la commande ci-dessous. Vous pouvez avoir besoin d'un accès élevé à l'exécution de cette commande "net stop hns && net start hns"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X