J'essayais d'exécuter un code de serveur de socket .Net sur une machine Win7-64bit.
Je reçois toujours 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 correctement dans Win-XP sp3.
J'ai vérifié Détails du code d'erreur sur MSDN mais cela n'a pas beaucoup de sens pour moi.
Quelqu'un a rencontré des problèmes similaires? De l'aide?
Sous Windows Vista (et Windows 7), Dns.GetHostEntry renvoie également des 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 une prise 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);
↑
Remarque : Il existe un raccourci pour obtenir l'adresse IP de localhost: Vous pouvez simplement utiliser IPAddress. Bouclage (127.0.0.1) ou IPAddress.IPv6Loopback (:: 1).
Modifiez C:\Windows\System32\drivers\etc\hosts et ajoutez la ligne "127.0.0.1 localhost" (si ce n'est pas le cas, sans les guillemets)