如何检查特定的 UDP 端口是否在 golang 中打开?到目前为止,我已经尝试了很多方法,但没有一个奏效。准确地说,所有这些,只要告诉服务器是否响应,无论我输入什么端口。方法一func methodOne(ip string, ports []string) map[string]string { // check emqx 1883, 8083 port results := make(map[string]string) for _, port := range ports { address := net.JoinHostPort(ip, port) // 3 second timeout conn, err := net.DialTimeout("udp", address, 3*time.Second) if err != nil { results[port] = "failed" // todo log handler } else { if conn != nil { results[port] = "success" _ = conn.Close() } else { results[port] = "failed" } } } return results}方法二func ping(host string, port string) error { address := net.JoinHostPort(host, port) conn, err := net.DialTimeout("udp", address, 1*time.Second) if conn != nil { fmt.Println(conn.LocalAddr()) defer conn.Close() } return err}方法三从这个包:https ://github.com/janosgyerik/portpingportping -c 3 -net udp 0.0.0.0.0 80
2 回答
慕少森
TA贡献2019条经验 获得超9个赞
鸿蒙传说
TA贡献1865条经验 获得超7个赞
由于 UDP 不提供类似“连接”的任何东西,在我看来,检查远程 UDP 服务器是否正在运行的唯一方法是发送有意义的消息,服务器可以理解该消息并且需要对此进行“响应”。然后我们只需要等待服务器回复,如果有回复 - 服务器就可以了。
同样,对于 UDP,我们必须进行多次发送,因为如果服务器关闭,它将不会收到数据包。
遵循所有这些逻辑,我实现了支持 UDP 和 TCP 库并按照上述方式工作的 GO 库/cli 实用程序。
- 2 回答
- 0 关注
- 610 浏览
添加回答
举报
0/150
提交
取消
