linux下tcp通信 ----- 如何实现两客户端通信,且服务端不做消息转发

刚刚实现了两客户端通信(linux下tcp协议),实现思路很简单,就是一个客户端发个消息,服务端先read到然后再write到另一个客户端,这样就行了。

仔细思考后,有个疑问,可不可以服务端不read,直接让另一个客户端去read,这样服务端的负担不就减轻了么。

刚接触tcp通信,求指导。给个思路或者直接丢个代码。

阅读 2.8k
1 个回答

这取决于两客户端的网络连接,分三种情况

  1. 直连,双方都没有使用 NAT(网络地址转换)设备(如路由器)
  2. 一方使用了 NAT 设备
  3. 双方都使用了 NAT 设备

前面两种均可实现两个客户端直连,第三种则视 NAT 设备能否预测端口而定,大部分也都可以直连。

想要了解更多技术细节,请搜索 "tcp traversal", "tcp hole punching", "nat traversal", "TCP 打洞" 等关键词。

参考资料

  1. https://en.wikipedia.org/wiki...
  2. https://en.wikipedia.org/wiki...
  3. https://github.com/dwoz/pytho...
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题