我正在编写一个系统,其中两个程序将通过TCP套接字进行异步通信。客户端是用golang编写的,但服务器可能会有所不同。我目前正在C#中写一篇。
在开发过程中,我使用了
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服务器的方法,它应该适用于所有情况?
答案 0 :(得分:3)
IPAddress.Loopback
是您正在寻找的。不过,您仍然有一个单独的IPv6地址 - IPAddress.IPv6Loopback
。根据定义,这两者分别对应127.0.0.1
和::1
- 它是IP标准的一部分。
如果您希望其他计算机也可以使用该服务器,IPAddress.Any
(以及IPv6的IPAddress.IPv6Any
)将绑定到系统上的所有NIC。
一般情况下,没有办法使用IPv4和IPv6"本地",因为这两个协议实际上是完全独立的(使用IPv4"后备" in IPv6 - 然而,它并没有被广泛支持,没有人真正使用它。但这对localhost来说并不是什么大问题 - 只是尝试绑定IPAddress.Loopback
,如果失败,请尝试IPAddress.IPv6Loopback
。