2016-06-14 11 views
2

Ich schreibe ein System, wo zwei Programme asynchron über einen TCP-Socket kommunizieren. Der Client ist in Golang geschrieben, aber der Server kann variieren. Ich schreibe gerade eine in C#.Welche Adresse wird für den lokalen TCP-Server verwendet?

Während der Entwicklung habe ich

conn, err := net.Dial("tcp", net.JoinHostPort("127.0.0.1", strconv.Itoa(d.port))) 

für den Client und auf dem Server ich getan habe:

this.listener = new TcpListener(IPAddress.Parse("127.0.0.1"), port); 

jedoch für die Produktion, ich vermute, dass nicht in allen Fällen funktionieren könnte. Zum Beispiel könnte der Benutzer IPv6 verwenden. Ich versuchte auch localhost auf dem Server, aber auf Windows, das nicht als 127.0.0.1 standardmäßig zu sein scheint (es muss aktiviert sein, die keine Option ist).

Gibt es eine einfachere Möglichkeit, einen lokalen TCP-Server auszuführen, der in jedem Fall funktionieren sollte?

+1

verwenden Sie 127.0.0.1. Für alle praktischen Zwecke ist es immer definiert. – JimB

Antwort

3

IPAddress.Loopback ist was du suchst. Sie haben jedoch immer noch eine separate Adresse für IPv6 - IPAddress.IPv6Loopback. Die beiden entsprechen per Definition 127.0.0.1 und ::1 - es ist Teil des IP-Standards.

Wenn Sie den Server auch von anderen Computern zur Verfügung stellen möchten, bindet 10 (und IPAddress.IPv6Any für IPv6) an alle NICs auf dem System.

Im Allgemeinen gibt es keine Möglichkeit, eine gemeinsame Lösung zu verwenden, die IPv4 und IPv6 "nativ" verwendet, da die beiden Protokolle wirklich vollständig getrennt sind (mit einem IPv4-Fallback in IPv6) unterstützt, und niemand nutzt es wirklich). Dies ist jedoch keine große Sache auf localhost - versuchen Sie einfach, IPAddress.Loopback zu binden, und wenn es fehlschlägt, versuchen Sie IPAddress.IPv6Loopback.