套接字应用程序无法在互联网上工作
Socket application does not work over the internet
我在套接字编程中遇到了一个问题。我目前正在编写一个简单的服务器/客户端应用程序,该应用程序要求连接客户端回答一项调查(我正在遵循《C中的TCP/IP套接字:程序员实用指南》一书中的练习)。它在我的本地网络中运行良好(使用localhost进行连接),但我无法使它在互联网上运行。由于我更改了书中的一些代码,我试图编译书中的原始源代码,但仍然不起作用。我想这不是代码问题,而是网络问题。我做了一些研究,所以我关闭了防火墙,我转发了我在路由器中使用的端口(12543),但它仍然不起作用。。。我有一个运行windows 7的远程windows服务器进行测试:当我在它上运行服务器并尝试从计算机连接时,它失败了,当我尝试从计算机运行服务器并试图从远程windows服务器连接时:它再次失败。即使我在计算机上运行服务器,并尝试使用我的专用IPv4地址192.168.x.x或我的公用IPv4地址从同一台计算机连接到客户端,它也会失败!哦,而且windows服务器上没有运行防火墙。
我真的不知道现在该怎么办。。。我可以从我的电脑ping我的windows服务器,我可以从windows服务器ping我的电脑,但不可能连接到我的应用程序。
源代码可以在这里找到:http://cs.ecs.baylor.edu/~donahoo/pactual/CSockets2/textcode.html(SurveyServer2.cpp、SurveyClient2.cpp和SurveyCommon.h),但我认为这不是代码问题。如果不够清楚,请告诉我。如果我犯了一些语法错误,请原谅,我是法国人!
任何帮助都将不胜感激,谢谢!
编辑:好的,我知道发生了什么:这是IPv4和IPv6之间的兼容性问题!它还没有正常工作,但我现在知道该修复什么了。谢谢大家:)
第二版:好吧,我想我终于明白了。我将服务器绑定到一个IPv6地址,但服务器运行的主机只有一个公共IPv4地址。当我尝试连接时,DNS解析只返回了IPv4地址,因此我无法连接到服务器。我告诉getaddrinfo只返回IPv4地址,所以现在它绑定在IPv4地址上,工作正常。
当然有一种方法可以为我的主机添加IPv6地址,但我认为我不需要它,它现在工作正常,我希望这不会造成任何麻烦。
代码使用getaddrinfo
,需要主机名而不是IP地址。
听起来确实有连接问题或DNS问题。
确保名称解析有效:
在客户端计算机的命令行上输入"ping server_NAME"。如果找不到服务器名称的IP地址,这可能是您的问题。
确保连接:
在服务器命令行上:
输入"netstat-an-p TCP"。这将显示所有正在侦听的程序及其端口号的列表。您应该看到您的服务器正在侦听端口12543。
在运行客户端程序的机器上:
使用telnet查看是否可以接通服务器。您可以通过命令行选项设置telnet使用的端口号。通常类似于"telnet-p 12543服务器ip"。如果它说"连接被拒绝",那么就存在连接问题(防火墙等)。如果它打开了一个连接,您将不会收到错误消息,并且您可以键入要发送到服务器的文本。你真的只关心telnet是否能够在这里建立tcp连接。
如果Telnet确实连接,那么您的问题是程序之间的通信,而不是网络问题。
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- esp8266互联网交换机问题
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- <<操作员在下面的行中工作
- 有人能解释一下为什么下界是这样工作的吗C++的
- ExtractIconEx:可以工作,但偶尔会崩溃
- C++中的memset函数工作不正常
- 当我在第一个循环中使用"auto"时,它工作正常,但是使用"int"它会给出错误,为什么?
- 链表c++插入,所有情况都已检查,但没有任何工作