【问题标题】:Sending TCP data to a client behind NAT将 TCP 数据发送到 NAT 后面的客户端
【发布时间】:2018-04-06 22:25:13
【问题描述】:

我正在使用一台服务器(不在 NAT 后面)和许多使用 NAT 的客户端开发客户端/服务器程序。我需要服务器能够经常向客户端传输文件,因此服务器必须能够在需要时启动 TCP 流量。我已经想出了如何通过缓存客户端的 IPEndPoints 并在以后使用它们来使用 UDP 来做到这一点。

任何人都可以推荐一些示例代码或他们看到的可以做到这一点的项目(带有源代码)吗?有很多聊天或 IM 项目可供学习,但它们通常仅使用 UDP 跨 NAT 或仅在未使用 NAT 的 LAN 上工作。带有解决方案的 C++/C#/VB 源代码会有很大帮助。谢谢。

【问题讨论】:

  • 所以您希望您的客户成为服务器?
  • 我只是希望客户端能够接收服务器发起的流量。与聊天服务器在消息发生时将消息推送给客户端的方式相同。
  • 好吧,除非客户端已经与服务器建立了连接,否则它们就不是客户端,因此您只需使用它即可。不清楚你在问什么。

标签: tcp nat


【解决方案1】:

您的最佳选择:

  1. 客户端定期轮询以发现是否有新文件可用。最简单的选择。这可能会或可能不会扩展,具体取决于有多少客户以及他们需要轮询的频率。

  2. 所有客户端都与服务器保持持久的 TCP 连接。服务器在准备好后将文件发送到特定的客户端。避免了 #1 的轮询开销,但如果您没有将服务设计为针对 C10K problem 进行扩展,那么如果客户端数量达到数千个,则可能会出现问题。

  3. 客户端连接到通知服务器,该服务器旨在处理同时连接的多个客户端。客户端将其通知服务器参数发送到文件传输服务并断开连接。当文件服务器有一个新文件可用时,服务器通过通知服务发送通知,告诉客户端连接回来等待一个文件。文件传输完成后客户端与文件服务器断开连接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-19
    • 1970-01-01
    • 1970-01-01
    • 2015-01-18
    相关资源
    最近更新 更多