【问题标题】:TCP Chat not working in different networksTCP 聊天在不同的网络中不起作用
【发布时间】:2015-11-11 13:46:30
【问题描述】:

我用 C/C++ 编写了一个 TCP/IP 聊天服务器/客户端,它可以在我的本地网络中完美运行,并且有多个客户端连接到它。当服务器与客户端位于不同的网络时,它不起作用。我之前在 Python 中编写了相同的工具,并且发生了同样的情况。

有没有办法解决这个问题?没有端口转发,这是最常见的解决方案。

我只能找到这个:Android server concept confusion. How to connect TCP chat app on different networks 但我看不懂。

注意:我刚刚找到了一个示例程序(服务器),它在不同的网络上可以工作; http://www.codeproject.com/Articles/1891/Beginning-Winsock-Programming-Simple-TCP-server

【问题讨论】:

  • C/C++ 语言到底是什么?
  • 您为服务器绑定了哪些接口?您是否确保网络之间没有防火墙规则阻止您的通信?
  • 1. C/C++ 表示 C 和 C++ ?
  • 2.没有防火墙、杀毒软件等运行,端口开放
  • 在一个系统上,你能ping另一个系统吗?此外,没有“C 和 C++”语言,无论您是使用 C 编程,还是使用 C++ 编程。

标签: c++ networking tcp ip


【解决方案1】:

你有三个选择:

1) NAT 穿透。两个设备同时尝试相互交换数据,欺骗每个人的路由器认为它正在回复。为此,你们每个人都需要彼此的公共 IP 地址,如果您需要 TCP 的任何功能,您需要自己实现它们。

2) 公共集合服务器。两台设备都会自动连接到未经过 NAT 的网络上的服务器。服务器知道连接到它的每个客户端的公共 IP 地址,因此它可以将您的数据路由到具有正确公共 IP 的客户端。

3) 1 和 2 的某种组合。这里使用公共服务器来促进 NAT 穿透并消除手动协调的需要。你的朋友在公共服务器上注册,公共服务器告诉他你的公共IP地址,方便NAT穿透。

【讨论】:

    【解决方案2】:

    设备的本地网络地址不会随意更改。你可以通过只定义本地地址来访问计算机。另一方面,如果你想与不同网络中的设备通信,你应该知道它的公共 IP,并且应该定义一个到端口的路由。

    如果您的服务器具有静态 IP 或已知 IP,则可以访问它。您可以在此服务器中动态存储客户端的 IP 地址。编写一个程序,将主机的 IP 通知服务器。这样,即使 IP 地址经常更改,您也可以存储它们。

    【讨论】:

    • 谢谢 :) 但是,假设我只想和朋友一起测试它:他启动了服务器,并给了我他当前的公共 IP(和端口)。我的想法是能够通过客户和他提供给我的信息与他联系。
    猜你喜欢
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    相关资源
    最近更新 更多