27 votes

SocketException : adresse incompatible avec le protocole demandé

J'ai essayé d'exécuter un code de serveur de socket .Net sur une machine Win7-64bit.
Je continue à obtenir l'erreur suivante :

System.Net.Sockets.SocketException : Une adresse incompatible avec le protocole demandé a été utilisée.
Code d'erreur : 10047

L'extrait de code est :

IPAddress ipAddress = Dns.GetHostEntry("localhost").AddressList[0];
IPEndPoint ip = new IPEndPoint(ipAddress, 9989);
Socket serverSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream, ProtocolType.Tcp);
try
{
    serverSocket.Bind(ip);
    serverSocket.Listen(10);
    serverSocket.BeginAccept(new AsyncCallback(AcceptConn), serverSocket);           
}
catch (SocketException excep)
{
  Log("Native code:"+excep.NativeErrorCode);
 // throw;
}    

Le code ci-dessus fonctionne bien sous Win-XP sp3 .

J'ai vérifié Détails des codes d'erreur sur MSDN mais ça n'a pas beaucoup de sens pour moi.

Quelqu'un a-t-il rencontré des problèmes similaires ? Une aide quelconque ?

53voto

dtb Points 104373

Sous Windows Vista (et Windows 7), DNS.GetHostEntry renvoie également les adresses IPv6. Dans votre cas, l'adresse IPv6 (::1) est la première de la liste.

Vous ne pouvez pas vous connecter à une adresse IPv6 (InterNetworkV6) avec un socket IPv4 (InterNetwork).

Modifiez votre code pour créer le socket afin d'utiliser la famille d'adresses de l'adresse IP spécifiée :

Socket serverSocket =
    new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
                        ↑

Note : Il existe un raccourci pour obtenir l'adresse IP de localhost : Vous pouvez simplement utiliser IPAddress.Loopback (127.0.0.1) ou IPAddress.IPv6Loopback (::1).

0voto

Ata Points 3959

Modifier C:\Windows\System32\drivers\etc\hosts et ajoutez la ligne "127.0.0.1 localhost" (si elle n'est pas là, sans les guillemets)

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