Go中的同一主机UDP数据包关联

时间:2018-08-24 16:06:51

标签: go udp unicast

在Go中,可以使用net.Addr接口发送UDP数据包以指定目标端点。一些特殊的地址,例如:80800.0.0.0使用本地环回接口发送数据包。收到消息后,消息的net.Addr仍在同一主机上,显示[::1]:8080作为源。确定数据包是由同一主机发送和接收的最简单方法是什么?

这是围棋场中的example。它显示的是0.0.0.0:8080(ipv4),而不是[::1]:8080

2 个答案:

答案 0 :(得分:0)

:8080不是地址,而是端口号,通常在Windows上测试您自己的http网站时使用,因为在Windows上您无法轻易使用端口80(实际的http端口)。 仅当您使用localhost作为IP地址时,才会使用回送接口。

IPv4的本地主机地址为127.0.0.1,而IPv6的本地主机地址为::1。地址0.0.0.0通常用作占位符地址,以指示例如侦听所有IP地址,请参见this question

如评论中所述,您可以使用net.IP.Equal来检查您的对等方是否为本地主机。只需将您的地址与127.0.0.1::1进行比较,net.IP.Equal函数就会认为它们相等。

答案 1 :(得分:0)

我最终使用net.Dial("udp", addr)并明显关闭了连接。 Dial还可以解析主机名,这也是我所需要的。

最好避免创建套接字,但是Dial暂时可以使用。