Ich habe mit Sockets auf einem lokalen Computer ohne Netzwerkverbindung gespielt. Siehe unten:
IPAddress address = IPAddress.Any; // doesn't work
IPAddress address = IPAddress.Parse("::1"); // works
Was genau ist die ::1
IP-Adresse? Ist es die standardmäßig verfügbare IP-Adresse oder die Loopback-Adresse? Was passiert mit dem obigen Code (Arbeitszeile) auf einem Computer mit dedizierter IP-Adresse und Netzwerkverbindung?
BEARBEITEN:
Der genaue Code wird verwendet, um eine bestimmte IP-Adresse an den Socket zu binden. Hier ist es:
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
quelle
quelle
IPAddress.Any
ist::0
, Sie solltenIPAddress.Loopback
für lokale (Loopback-) Verbindung verwenden.IPAddress.Pars
wirklichIPAddress.Parse
richtig ist?Antworten:
::1
ist die Loopback-Adresse in IPv6. Betrachten Sie es als die IPv6-Version von127.0.0.1
.Siehe http://en.wikipedia.org/wiki/Localhost
quelle
IPAddress.Parse("127.0.0.1")
funktioniert auf meinem Computer nicht.Windows Server 2008 Enterprise Edition 64-bit
und keine Firewall von Drittanbietern installiert. Ich frage mich, warum ich mich nicht127.0.0.1
an meinen Socket binden kann , solange dieser::1
verfügbar ist.Um nur ein wenig mehr Informationen hinzuzufügen, wird in IPv6 die Loopback-Adresse als 127 Nullen dargestellt, gefolgt von einer 1, dh (0000 ... 127 mal..1). Die Darstellung hätte so aussehen sollen -> 0000: 0000: 0000: 0000: 0000: 0000: 0000: 0001, aber wir haben eine Kurzdarstellung dafür. Wenn ein einzelner Block alle Nullen enthält, können Sie ihn durch eine einzelne 0 ersetzen. So wird er zu -> 0: 0: 0: 0: 0: 0: 0: 0001 . Wieder können wir sehen, dass wir Läufe von Nullen haben, sie können eliminiert werden und wir erhalten -> :: 0001 -> :: 1 .
quelle