Eu estava brincando com soquetes na máquina local sem conexão de rede. Ver abaixo:
IPAddress address = IPAddress.Any; // doesn't work
IPAddress address = IPAddress.Parse("::1"); // works
Então, qual é exatamente ::1
o endereço IP? É o endereço IP padrão disponível ou é o endereço de loopback? o que acontece com o código acima (linha de trabalho) em uma máquina com endereço IP dedicado e conexão de rede?
EDITAR:
o código exato é usado para vincular um endereço IP específico ao soquete. Aqui 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
fonte
fonte
IPAddress.Any
é::0
, você deve usarIPAddress.Loopback
para conexão local (loopback).IPAddress.Pars
está realmenteIPAddress.Parse
correta?Respostas:
::1
é o endereço de loopback no IPv6. Pense nisso como a versão IPv6 do127.0.0.1
.Veja http://en.wikipedia.org/wiki/Localhost
fonte
IPAddress.Parse("127.0.0.1")
não funciona na minha máquina.Windows Server 2008 Enterprise Edition 64-bit
e nenhum firewall de terceiros instalado. Estou me perguntando por que não consigo ligar127.0.0.1
ao meu soquete enquanto::1
está disponível.Apenas para adicionar um pouco mais de informação a ele, no endereço de loopback IPv6 é representado como 127 zeros seguidos por 1, isto é (0000 ... 127 vezes ... 1). Sua representação deveria ter sido assim -> 0000: 0000: 0000: 0000: 0000: 0000: 0000: 0001, mas temos uma representação de forma abreviada para isso. Se houver todos os zeros em um único bloco, você pode substituí-lo por um único 0. Assim, ele se torna -> 0: 0: 0: 0: 0: 0: 0: 0: 0001 . Novamente podemos ver que temos execuções de zeros, eles podem ser eliminados e obtemos -> :: 0001 -> :: 1 .
fonte