套接字应用程序无法在Internet上运行

时间:2011-06-27 18:10:38

标签: c++ sockets connect

我在套接字编程方面遇到了问题。我目前正在编写一个简单的服务器/客户端应用程序,要求连接客户端来回答调查(我正在按照书中的练习:C中的TCP / IP套接字:程序员实用指南)。它在我的本地网络中工作正常(使用localhost连接),但我无法通过互联网工作。 由于我改变了本书中的一些代码,我试图从书中编译原始源代码,但它仍然无效。我认为这不是代码问题,而是网络问题。 我做了一些研究,所以我关闭了我的防火墙,我转发了我在路由器中使用的端口(12543),但它仍然无法工作......我有一台运行Windows 7的远程Windows服务器进行测试:当我在其上运行我的服务器并尝试从我的计算机连接它失败,当我尝试从我的计算机运行我的服务器并尝试从远程Windows服务器连接时:它再次失败。即使我在计算机上运行服务器并尝试使用我的私有IPv4地址192.168.x.x或我的公共计算机从同一台计算机连接客户端,它也会失败!哦,Windows服务器上没有运行防火墙。

我真的不知道现在要做什么...我可以从我的电脑上ping我的Windows服务器,我可以从我的Windows服务器ping我的电脑,但是无法连接到我的应用程序。

源代码可以在这里找到:http://cs.ecs.baylor.edu/~donahoo/practical/CSockets2/textcode.html(SurveyServer2.cpp,SurveyClient2.cpp,SurveyCommon.h),但我认为这不是代码问题。 请告诉我它是否不够清楚。如果我做了一些语法错误,请原谅我,我是法国人!

任何帮助将不胜感激,谢谢!

编辑:好的,我知道发生了什么:这是IPv4和IPv6之间的兼容性问题!它尚未正常工作,但我现在知道要解决什么问题。谢谢大家:)

第二次编辑:好吧,我想我终于理解了。我将我的服务器绑定到IPv6地址,但我的服务器运行的主机只有一个公共IPv4地址。当我尝试连接时,DNS解析仅返回IPv4地址,因此无法连接到我的服务器。我告诉getaddrinfo只返回IPv4地址,所以现在它绑定了一个IPv4地址,它工作正常。

肯定有办法为我的主机添加IPv6地址,但我认为我不需要它,它现在可以正常工作,我希望这不会造成任何麻烦。

2 个答案:

答案 0 :(得分:1)

代码使用getaddrinfo并且需要主机名而不是IP地址。

答案 1 :(得分:0)

听起来好像有连接问题或DNS问题。

确保名称解析正常:

在客户端计算机的命令行中输入“ping server_NAME”。 如果找不到可能是您问题的服务器名称的IP地址。

确保连接:

在服务器命令行上:

输入'netstat -an -p TCP'。这将显示所有正在收听的节目及其端口号的列表。您应该看到您的服务器正在侦听端口12543。

在运行客户端程序的计算机上:

使用telnet查看是否可以访问服务器。您可以使用命令行选项设置telnet使用的端口号。通常类似'telnet -p 12543 server-ip'。如果它说'连接被拒绝'则会出现连接问题(防火墙/等)。如果它打开连接,您将不会收到任何错误消息,您将能够键入要发送到服务器的文本。你真的只关心telnet能否在这里建立一个tcp连接。

如果Telnet确实连接,那么您的问题是程序之间的通信,而不是网络问题。