2012-10-14 144 views
2

我有两个应用程序。一个是服务器应用程序,另一个是客户端应用程序。服务器应用程序侦听连接,然后将消息提供给所有连接的客户端。客户端/服务器安装只能在同一台机器上运行

到目前为止,我的所有测试都是通过在同一台机器上运行这两个应用程序来完成的,而且这种方式工作正常。现在尽管我试图测试在一台机器上运行的服务器以及在另一台机器上运行的客户机。

这些机器都在我自己的家庭网络中。该网络位于具有防火墙的路由器之后。从我读过的内容来看,我的问题可能与端口转发有关,而不是在我的路由器上设置。这听起来可能吗?

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

然后,也许我在这里吠叫错误的树。也许还有一些其他问题阻止我的代码在这种情况下工作?

我可以提供的任何代码段,可能会有所帮助,但我不能确定在何处开始寻找,我不想只是张贴我的整个解决方案:)

预先感谢您

+0

这与您的路由器无关。您必须绑定到服务器上的外部地址(例如192.168.1.X或INADDR_ANY(0.0.0.0)),并使用客户端连接到该计算机的外部IP地址。 –

+0

我的服务器已经做了绑定。它最终绑定到特定的IPv6地址。我的客户可以连接2种方式之一;到该特定的IPv6地址或服务器主机的名称。当客户端应用程序在服务器机器上运行时都可以工作。但是,当应用程序位于同一网络中的不同PC上时,它们都不起作用。我认为那个特定的IPv6地址可能是本地IP。你认为这可能是问题吗? – FunnerSoft

+1

@SnapGames:你可以发布你的约束力地址吗? – mauve

回答

3

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

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

+0

+1。他的客户端必须指向服务器的IP。 –

+0

淡紫色,请参阅我的评论,我已添加到原始文章。 – FunnerSoft

+1

好吧,所以花了我一段时间才终于明白你的答案:)(请参阅我上面的各种评论)我需要用NULL作为第一个参数调用getaddrinfo。这会给我2个结果,所有IPv6地址都是“::”,所有IPv4地址都是“0.0.0.0”。我必须将一个套接字绑定到每个套接字上,以便客户端可以连接IPv4或IPv6。 – FunnerSoft

相关问题