web-dev-qa-db-fra.com

une tentative d'accès à un socket de manière interdite par ses autorisations d'accès a été effectuée. 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 marche pas. Est-ce que quelqu'un pourrait m'aider? 

32
andrew

Très probablement, le socket est tenu par un processus. Utilisez netstat -o pour trouver lequel.

38
stark

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

37
Jonathan

Eh bien, je ne comprends même pas le coupable de ce problème. Mais dans mon cas, le problème est totalement différent. J'ai essayé d'exécuter netstat -o ou netstat -ab, les deux montrent qu'il n'y a aucune application en cours d'écoute sur le port 62434 qui est celui sur lequel mon application tente d'écouter. C'est donc très déroutant pour moi.

J'ai juste essayé de penser à ce que j'avais fait pour que ça cesse de fonctionner (ça marchait avant). Alors, j'ai pensé au partage Internet que j'ai effectué sur mon adaptateur Ethernet avec un réseau local virtuel privé (utilisant Hyper-v sous Windows 10). J'avais juste besoin de désactiver le partage et cela fonctionnait très bien à nouveau.

J'espère que cela aidera quelqu'un d'autre à avoir le même problème. Et bien sûr, si quelqu'un peut expliquer cela, veuillez ajouter plus de détails dans votre propre réponse ou peut-être comme commentaire à ma réponse.

10
Hopeless

J'ai eu ce problème en essayant de démarrer un projet dotnet Core à l'aide de l'exécution de dotnet lorsqu'il a tenté de se lier au port.

Le problème était dû à l'ouverture d'une instance de Visual Studio 2017 avec le projet. J'avais déjà démarré le projet via VS pour le débogage. Il semblait rester en attente sur le port, alors que le débogage était terminé et que l'application semblait fermée .

La fermeture de l'instance de Visual Studio et l'exécution de "dotnet run" ont à nouveau résolu le problème.

4
Gareth

C'est l'erreur qui est renvoyée lorsque le pare-feu Windows bloque le port (en sortie). Nous avons un serveur Web strict, donc les ports sortants sont bloqués par défaut. Tout ce que je devais faire était de créer une règle autorisant le numéro de port TCP dans wf.msc. 

2
Rwt

J'ai eu un problème similaire mais je l'ai résolu en modifiant le paramétrage du pare-feu.

Vous pouvez suivre les étapes ci-dessous

  1. Allez dans "Démarrer" -> "Panneau de configuration"
  2. Cliquez sur "Pare-feu Windows"  enter image description here

  3. Dans le pare-feu Windows, cliquez sur "Autoriser un programme ou une fonctionnalité via le pare-feu Windows"  enter image description here

  4. Maintenant, à l'intérieur de l'option Autoriser les programmes, cliquez sur le bouton "Modifier les paramètres". Une fois que vous avez cliqué sur le bouton Modifier les paramètres, le bouton "Autoriser un autre programme ..." est activé .  enter image description here

  5. Cliquez sur le bouton "Autoriser un autre programme ..." pour ouvrir une nouvelle boîte de dialogue. Choisissez les programmes ou l'application pour lesquels vous obtenez l'exception de sockets et cliquez sur le bouton "Ajouter" .  enter image description here

  6. Cliquez sur OK et redémarrez votre ordinateur.

  7. Essayez d’exécuter votre application (avec une exception) avec des droits d’administrateur.

J'espère que ça aide.

Paix,

Sunny Makode

1
Sunny656

J'ai commencé à avoir une erreur très similaire lorsque mon ordinateur a été mis à niveau vers l'ajout de l'anniversaire de Windows 10 et a effectivement supprimé tous mes paramètres. C'était comme travailler avec un nouvel ordinateur, tout configurer pour la première utilisation ... et puis, soudainement, j'ai eu cette erreur lorsque mon code essayait d'utiliser un service Web.

Mais le vrai coupable, et la solution dans mon cas était que je devais vérifier l'option pour exécuter en 64 bits. Ce choix avait été perdu dans mon cas.

Outils -> Options -> Projets et solutions -> Projets Web -> "Utilisez la version 64 bits de IIS Express pour les sites Web et les projets".

0
Greg

Exécuter iisreset dans une fenêtre de commande l’a corrigé.

0
MFry