Golang TCP拨号错误:主机已关闭

时间:2018-05-09 10:45:29

标签: go networking tcp

net.Dial("tcp", "192.168.1.100:3000")

以上电话给我dial tcp 192.168.1.100:3000: connect: host is down

我可以成功ping通端点。我想知道这个错误的原因是什么。 host is down的可能原因是什么?

让我提供更多细节。我拨打的端点正在运行mysql服务器。我可以使用命令行成功连接到它。端点是NAS中的主机。

进一步调查,我认为错误消息来自https://github.com/golang/go/blob/60e3ebb9cba900f7b2f559b472726cee47e823c0/src/net/fd_unix.go#L94

2 个答案:

答案 0 :(得分:2)

错误消息表示无法在给定端口上为给定IP地址创建TCP连接。你的ping检查没有多大帮助,因为ping确实使用ICMP来访问主机,这与你使用TCP相反。成功的ping只是意味着主机一般是可达的,但不是与给定端口上的主机的TCP连接成功。甚至可能是这样的连接成功但ping失败,因为它被防火墙规则阻止。

您看到的问题的典型原因是:

  • 您使用了错误的目标IP和/或端口。
  • 根本没有应用程序在目标计算机的此端口上进行侦听,即您可能忘记启动服务器或者它已崩溃或者配置错误。
  • 应用程序仅侦听localhost,因此无法从计算机外部访问。
  • 防火墙规则在服务器计算机上或客户端和服务器块访问之间。

答案 1 :(得分:2)

我发现了原因。这是因为防火墙设置。这种情况是由使用Little Snitch引起的,它会检查可执行文件是否具有有效的代码签名。如果可执行文件没有有效的代码签名,请求将被过滤,Little Snitch将返回错误号64,这意味着Mac中的主机已关闭。