【问题标题】:Client-server application between two computers in the same network (using boost::asio)同一网络中两台计算机之间的客户端-服务器应用程序(使用 boost::asio)
【发布时间】:2013-07-02 07:25:57
【问题描述】:

我正在尝试使用 boost::asio 教程:synchronous clientsynchronous server,在同一网络中的台式 PC 和笔记本电脑(后者使用无线连接)之间建立基本通信(在 c++ 中)。

当我在同一台机器上同时运行服务器和客户端时(使用本地主机和日期时间端口作为参数),它运行得非常好。但是,如果我尝试将笔记本电脑设置为服务器(在命令提示符下使用netstat -anb 对其进行测试,它确实正在运行并按预期监听端口 13,我什至停用了防火墙以确保它不会导致任何问题),我无法通过客户端(在 PC 上设置)连接到它,无论我尝试什么 IP(本地主机,基本上是 ipconfig -all 给我的任何 IP)。

所以无论我尝试什么,我都找不到客户端可以用来连接服务器的正确地址。 谁能帮帮我?

【问题讨论】:

  • 我们能否看到netstat 的输出,让您确信服务器正在监听?如果您没有选择一个 IP 地址来工作,那么没有一个工作也不足为奇。
  • 当然:i40.tinypic.com/am382a.png 实际上我没有在服务器中指定任何 IP 地址,尽管我后来尝试使用许多 IP 这样做(主要是 ipconfig 给我的,并在当然,客户端也是如此),没有任何改进。
  • 它在我工作场所的两台计算机之间运行良好(所以现在我知道我必须给客户端的 IP 是服务器机器的本地 IP),所以问题出在我的家庭网络中。将对此进行调查,非常感谢您的回复! ;)

标签: c++ connection client-server boost-asio lan


【解决方案1】:

问题很可能是您的家庭网络,而不是您的程序。

假设您的 PC 和笔记本电脑都连接到同一个路由器(PC 通过以太网和笔记本电脑通过无线连接),任何一台机器产生的任何流量都会首先发送到路由器。当此流量到达路由器时,它很可能会进行网络地址转换 (NAT),然后将流量发送到 Internet。如果是这种情况,来自您的客户端的请求可能会被发送到更大的互联网(您发送请求的内部 IP 地址未找到/未在给定端口上运行您期望的服务),而不是转发到本地网络中运行的服务器。

要检验这个假设,请使用运行服务器的 IP 地址/端口号从客户端运行 traceroute。如果路由经过超过 3 个跃点(实习生客户端 -> 路由器 -> 内部服务器),它将被发送到更大的互联网。如果是这种情况,您可以配置您的路由器(也许查看port forwarding),以便将具有给定 IP/端口的任何流量转发到内部服务器,而不是进入更大的互联网。

【讨论】:

  • 你说得对,我尝试在工作场所的两台计算机之间运行应用程序,效果很好。所以问题出在我的家庭网络中,我将研究端口转发。非常感谢! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-06
  • 2018-03-07
相关资源
最近更新 更多