【问题标题】:Boost-ASIO simple echo client-server cannot establish connection?Boost-ASIO 简单回显客户端-服务器无法建立连接?
【发布时间】:2013-02-23 01:09:36
【问题描述】:

我正在使用 BOOST-ASIO 进行简单的回显 client-server(客户端和服务器有单独的链接)。当我尝试运行服务器时,我使用这个async_tcp_echo_server 4000。对于客户端,我使用blocking_tcp_echo_client #.#.#.# 4000(以#.#.​​#.# 作为IP 地址)。我在 XP-SP3 上,我的计算机使用 USB 卡连接到我的无线 dsl 调制解调器。在客户端几秒钟后,我收到此错误:

Exception: connect: A connection attempt failed because the connected party did
not properly respond after a period of time, or established connection failed be
cause connected host has failed to respond

有什么想法吗?我关闭了包括 Windows 防火墙在内的防火墙,但仍然没有任何响应。我的端口可能在不正确的范围内吗?我是否需要包含计算机名称来指定网络上的机器(网络上有时还有其他机器处于活动状态)?我确实尝试在另一台直接连接到 dsl 调制解调器的计算机上运行它,但同样的问题。我确实ping了我的地址,并且确实适用于4/4个数据包。

【问题讨论】:

    标签: client-server boost-asio connectivity


    【解决方案1】:

    这可能是各种各样的问题。因此,值得使用较低级别的网络工具,例如netcat 为服务器上的端口提供服务,并尝试从客户端与netcat 连接。这可以通过消除应用程序的网络编程代码引入的任何潜在问题来帮助简化问题。如果问题被确定为网络问题,则需要检查以下几点:

    • 验证服务器上的防火墙例外情况。
    • 验证服务器网关中的防火墙例外情况。
    • 如果服务器和客户端位于不同的网络上,并且客户端尝试连接到服务器的外部 IP,则验证服务器的网关是否知道要路由到服务器的流量。这可能需要在路由设备中设置规则,例如port forwarding
    • 如果服务器和客户端在同一个网络上,但客户端尝试通过网络的外部 IP 连接到服务器,则验证网关是否支持环回以外部 IP 为目标的内部流量。
    • 使用网络分析工具(例如 Wireshark)来验证数据包中的 time to live 字段是否足够高,不会被丢弃。

    【讨论】:

    • 我最近发现了这个页面stackoverflow.com/questions/10274623/… 这可能是原因。我是wireshark的新手,所以我会尝试将其作为我最后的选择,但你确实提到了端口转发,我猜这是现在最有可能出错的地方。
    【解决方案2】:

    你可以试试

    $ telnet server-ip 4000
    

    从您的客户端,看看是否可以建立 tcp 连接。

    【讨论】:

    • Could not open connection to the host, on port 4000: Connect failed 但它似乎要去某个地方!
    猜你喜欢
    • 1970-01-01
    • 2021-04-01
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多