客户端/服务器设置仅在同一台机器上有效

Posted

技术标签:

【中文标题】客户端/服务器设置仅在同一台机器上有效【英文标题】:Client/Server setup only works when on same machine 【发布时间】:2012-10-14 20:23:56 【问题描述】:

我有两个应用程序。一个是服务器应用程序,另一个是客户端应用程序。服务器应用侦听连接,然后将消息提供给所有连接的客户端。

到目前为止,我的所有测试都是通过在同一台机器上运行两个应用程序来完成的,并且运行良好。现在虽然我正在尝试测试在一台机器上运行的服务器和在另一台机器上运行的客户端。

每台机器都在我自己的家庭网络中。该网络位于带有防火墙的路由器后面。根据我的阅读,我的问题可能与我的路由器上未设置端口转发有关。听起来可能吗?

我可以用我的代码解决这个问题吗?我真的必须要求所有用户手动打开防火墙上的端口吗?我使用了许多其他连接到服务器的商业应用程序,并且不需要我在防火墙上打开端口。这些应用程序和我的有什么不同?

再一次,也许我在这里叫错了树。也许还有其他问题阻止我的代码在这种情况下工作?

我可以提供任何可能有帮助的代码 sn-ps,但我不确定从哪里开始寻找,我不想只发布我的整个解决方案 :)

提前谢谢你

【问题讨论】:

这与你的路由器无关。您必须绑定到服务器上的外部地址(例如 192.168.1.X 或 INADDR_ANY (0.0.0.0))并使用客户端连接到该机器的外部 IP 地址。 我的服务器已经完成了绑定。它最终绑定到特定的 IPv6 地址。我的客户能够连接两种方式中的一种;到那个特定的 IPv6 地址或服务器机器的主机名。当客户端应用程序在服务器机器上运行时,两者都可以工作。但是,当应用程序位于同一网络中的不同 PC 上时,两者都不起作用。我认为那个特定的 IPv6 地址可能是一个本地 IP。你认为这可能是问题所在? @SnapGames:能否请您发布您的绑定地址? Mauve,我的代码调用 getaddrinfo。在这种情况下,有 4 个结果:fe80::d5b5:6efd:37a8:39e8%11、fe80::38fe:3fae:3f57:fe92%12、192.168.1.109 和 2001:0:4137:9e76:38fe:3fae :3f57:fe92。然后我的代码循环遍历这些代码,直到它能够成功绑定到一个以进行收听。同样,在这种情况下,它最终成功绑定到第一个,所以它就在那里结束。 我发现如果我绑定到 IPv4 地址,那么一切正常。我觉得这很奇怪,因为两台机器都有支持 IPv4 的网络设备。也许我的路由器不支持 IPv4?它很老了。无论哪种方式,我想正确的解决方案是绑定到 getaddrinfo 的所有结果(在本例中为 4 个)? 【参考方案1】:

您需要绑定到 0.0.0.0(简化版)才能接受不是来自本地计算机的连接。你检查过你没有绑定到 127.0.0.1 吗?

当您绑定到 0.0.0.0 时,您实际上绑定到当前主机的所有当前和未来地址,因此将能够接受来自任何地方的连接,您也可以仅绑定到其中一个网络接口的地址。

【讨论】:

+1。而且他的客户端必须指向服务器的IP。 Mauve,请查看我在原帖中添加的评论。 好的,所以我花了一段时间才最终理解你的答案:)(参见上面我的各种 cmets)我需要调用 getaddrinfo 并以 NULL 作为第一个参数。这将给我 2 个结果,所有 IPv6 地址的“::”和所有 IPv4 地址的“0.0.0.0”。而且我必须为每一个绑定一个套接字,以便客户端可以使用 IPv4 或 IPv6 连接。

以上是关于客户端/服务器设置仅在同一台机器上有效的主要内容,如果未能解决你的问题,请参考以下文章

同一台机器上的IPC...WCF

如何配置 apache 在同一台机器上使用 FE 和 BE?

在同一台开发机器上运行多个 Netty 客户端和服务器

同一网段的两台服务器一台能PING通,一台PING不通,为啥呀?

同一网段的两台服务器一台能PING通,一台PING不通,为啥呀?

是否可以在同一台机器上运行套接字服务器和套接字客户端?