2016-06-14 110 views
2

我正在写一个系统,其中两个程序将通过TCP套接字异步通信。客户端用golang编写,但服务器可能有所不同。我目前正在用C#编写一个。本地TCP服务器使用哪个地址?

在开发过程中,我用

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

客户端,并在服务器上我做:

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

然而,对于生产,我怀疑可能并非在所有情况下工作。例如,用户可能会使用IPv6。我也在服务器上试过localhost,但是在Windows上,默认情况下它不是和127.0.0.1一样(它必须被启用,这不是一个选项)。

是否有一种运行本地TCP服务器的更加傻瓜化的方式,应该在所有情况下都能正常工作?

+1

使用127.0.0.1。出于所有实际目的,它总是被定义的。 – JimB

回答

3

IPAddress.Loopback是你在找什么。您仍然有一个单独的IPv6地址,但是 - IPAddress.IPv6Loopback。根据定义,两者分别对应127.0.0.1::1 - 它是IP标准的一部分。

如果您希望其他计算机也可以使用该服务器,则IPAddress.Any(和IPAddress.IPv6Any用于IPv6)将绑定到系统上的所有NIC。

一般来说,没有办法使用“本机”使用IPv4和IPv6的通用解决方案,因为两种协议实际上是完全分离的(IPv6中使用IPv4“后备” - 但它并不广泛支持,并没有人真正使用它)。然而,这对本地主机来说并不是什么大事,只是尝试绑定IPAddress.Loopback,如果失败,请尝试IPAddress.IPv6Loopback

相关问题