Estaba jugando con sockets en una máquina local sin conexión de red. Vea abajo:
IPAddress address = IPAddress.Any; // doesn't work
IPAddress address = IPAddress.Parse("::1"); // works
Entonces, ¿qué es exactamente ::1
la dirección IP? ¿Es la dirección IP disponible predeterminada o es la dirección de bucle invertido? ¿Qué sucede con el código anterior (línea de trabajo) en una máquina con dirección IP dedicada y conexión de red?
EDITAR:
El código exacto se utiliza para vincular una dirección IP específica al socket. Aquí está:
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
fuente
fuente
IPAddress.Any
es decir::0
, debe utilizarIPAddress.Loopback
para la conexión local (bucle invertido).IPAddress.Pars
es realmenteIPAddress.Parse
correcta.Respuestas:
::1
es la dirección de loopback en IPv6. Piense en ello como la versión IPv6 de127.0.0.1
.Ver http://en.wikipedia.org/wiki/Localhost
fuente
IPAddress.Parse("127.0.0.1")
no funciona en mi máquina.Windows Server 2008 Enterprise Edition 64-bit
y no hay un firewall de terceros instalado. Me pregunto por qué no puedo conectarme127.0.0.1
a mi enchufe mientras::1
está disponible.Solo para agregar un poco más de información, en IPv6 la dirección de loopback se representa como 127 ceros seguidos de un 1, es decir (0000 ... 127 veces ... 1). Su representación debería haber sido así -> 0000: 0000: 0000: 0000: 0000: 0000: 0000: 0001 pero tenemos una representación de forma corta para esto. Si hay todos los ceros en un solo bloque, puede reemplazarlo por un solo 0. Entonces se convierte en -> 0: 0: 0: 0: 0: 0: 0: 0001 . Nuevamente podemos ver que tenemos corridas de ceros, se pueden eliminar y obtenemos -> :: 0001 -> :: 1 .
fuente