将TCP数据发送到NAT后面的客户端

时间:2018-04-06 22:25:14

标签: tcp nat

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

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

1 个答案:

答案 0 :(得分:0)

您最好的选择:

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

  2. 所有客户端都与服务器保持持久的TCP连接。服务器准备好后将文件发送到特定客户端。避免#1的轮询开销,但如果您没有设计服务以扩展C10K problem,则可能会遇到问题,如果您的客户数达到数千人。

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