Je jouais avec des sockets sur une machine locale sans connexion réseau. Voir ci-dessous:
IPAddress address = IPAddress.Any; // doesn't work
IPAddress address = IPAddress.Parse("::1"); // works
Alors, quelle est exactement ::1
l'adresse IP? Est-ce l'adresse IP disponible par défaut ou l'adresse de bouclage? qu'advient-il du code ci-dessus (ligne de travail) sur une machine avec une adresse IP dédiée et une connexion réseau?
ÉDITER:
le code exact est utilisé pour lier une adresse IP spécifique au socket. C'est ici:
ServicePoint sp = ServicePointManager.FindServicePoint(uri);
sp.BindIPEndPointDelegate = new BindIPEndPoint(Bind);
// here's the bind delegate:
private IPEndPoint Bind(ServicePoint sp, IPEndPoint ep, int retryCount)
{
return new IPEndPoint(IPAddress.Parse("::1"), 0);
}
c#
ip
system.net
Xaqron
la source
la source
IPAddress.Any
est::0
, vous devez utiliserIPAddress.Loopback
pour la connexion locale (en boucle).IPAddress.Pars
est vraimentIPAddress.Parse
, correcte?Réponses:
::1
est l'adresse de bouclage dans IPv6. Considérez-le comme la version IPv6 de127.0.0.1
.Voir http://en.wikipedia.org/wiki/Localhost
la source
IPAddress.Parse("127.0.0.1")
ne fonctionne pas sur ma machine.Windows Server 2008 Enterprise Edition 64-bit
et aucun pare-feu tiers n'est installé. Je me demande pourquoi je ne peux pas me lier127.0.0.1
à ma socket tant qu'elle::1
est disponible.Pour y ajouter un peu plus d'informations, l'adresse de bouclage IPv6 est représentée par 127 zéros suivis d'un 1, c'est-à-dire (0000 ... 127 fois..1). Sa représentation aurait dû être comme ceci -> 0000: 0000: 0000: 0000: 0000: 0000: 0000: 0001 mais nous avons une représentation abrégée pour cela. S'il y a tous les zéros dans un seul bloc, vous pouvez le remplacer par un seul 0. Il devient donc -> 0: 0: 0: 0: 0: 0: 0: 0001 . Encore une fois, nous pouvons voir que nous avons des séries de zéros, ils peuvent être éliminés et nous obtenons -> :: 0001 -> :: 1 .
la source