gpt4 book ai didi

c++ - 专用服务器如何在 p2p (TCP) 中相互通知客户端

转载 作者:太空宇宙 更新时间:2023-11-04 04:48:29 24 4
gpt4 key购买 nike

我正在学习网络编程,我想创建一个基于TCP连接的简单的P2P网络。

到目前为止,我有一个接受来自客户端(TCP)连接的服务器。客户端知道服务器的初始位置。

这些是我的问题:

  1. 服务器如何向客户端通知彼此?是否只需将每个机构的 IP 地址列表发送给每个人即可?

  2. 如果所有客户端都在同一台计算机上运行(例如 127.0.0.1),它们在相互连接时是否需要使用不同的端口号?

  3. 如果我想维持 TCP 连接,对等方如何决定每对中谁是客户端,谁是服务器?当他向客户端发送信息时,也许可以在服务器端完成此操作。

我认为 TCP 连接在这种情况下并不理想,至少是因为客户端必须为网络中的每个对等点维护单独的连接。尽管这更多的是一次训练练习,我正在寻找可靠的连接,但我不必处理某些数据包丢失/乱序的可能性。 (现阶段:)。

谢谢!

最佳答案

对于问题一,这取决于您的设计,但定期通知连接的客户端有关其他客户端的信息是一种方法。

对于第二个问题,如果一个客户端也应该充当其他客户端的服务器,那么它们别无选择,因为每个客户端都需要绑定(bind)到本地地址(IP地址/端口号对),并且如果使用特定IP地址上的一个端口,那么您必须选择另一个端口。这可以通过在绑定(bind)时将端口设置为零来自动执行,操作系统将为您选择一个端口。

关于第三个问题,为什么一个客户端不能既是客户端又是服务器端呢?客户端连接到中央服务器,中央服务器跟踪网络中的所有客户端,并且可能还处理来自客户端的查询。当中央服务器收到查询时,它将其发送到所有其他连接的客户端,并回复查询客户端有关其他客户端拥有其搜索的内容。然后,原始客户端连接到具有其搜索内容的其他客户端,然后这些客户端充当原始客户端的服务器。

类似这样的事情:

  1. 客户端 A、B、C 和 D 连接到服务器
  2. 客户端 A 向服务器发送查询
  3. 服务器向客户端 B、C 和 D 发送查询
  4. 客户 B 和 D 回复说他们有查询的内容
  5. 服务器将信息发送回客户端A
  6. 客户端 A 连接到客户端 B 和 D

现在客户端 B 和 D 既充当客户端又充当服务器。它还解决了您的第一个问题,因为服务器仅在需要时发送有关其他客户端的信息。

关于c++ - 专用服务器如何在 p2p (TCP) 中相互通知客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18571335/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com