1

假设你有一个 UDP 服务器在 Linux 的 9030 端口上运行,你不能以某种方式访问​​那个 UDP 服务器。没有防火墙或类似设置阻止访问该 UDP 端口。另外请注意,数据包到达操作系统的网络堆栈,当操作系统收到数据包时,它会立即发送目标端口不可达的 ICMP 数据包。令您惊讶的是,netstat 输出显示 UDP 服务器正在您分配的确切端口上运行,如下所示:

udp        0      0 212.253.35.111:9030     0.0.0.0:* 722/udpServerApp

另请注意,UDP 服务器侦听公共 IP,而不是本地主机等。这意味着数据包到达该公共 IP 地址。

那么可能会出现什么问题呢?你最好的猜测是什么?我真的很困惑。

4

3 回答 3

3

您可能没有在正确的地址上收听 - 例如在127.0.0.1(localhost)上收听而不是“任何”地址。netstat 的确切输出会告诉你(但你没有发布它并要求猜测,所以在这里)。

于 2011-04-06T16:27:15.080 回答
1

您的套接字正在侦听端口 9030 上的本地 IP 地址 212.253.35.111 。

通过 tcpdump 或 wireshark 验证您确实将 UDP 数据包发送到 IP 212.253.35.111 端口 9030。

您要么尝试连接到错误的端口、错误的 IP 地址,要么存在尚未发现的防火墙(例如一些本地 iptables 规则),要么存在路由错误,并且不知何故您在某处有 2 台相同的机器IP 地址(通过一些负载平衡/热备用设置很可能,例如,如果您使用 VRRP)

于 2011-04-06T19:37:15.257 回答
0

UDP服务器绑定在哪个IP地址?

如果它只是绑定,127.0.0.1那么它将无法从外部网络接口访问。

要监听每个接口,它应该绑定到INADDR_ANY.

于 2011-04-06T16:27:33.227 回答