专用服务器如何在p2p(TCP)中通知Cliens彼此

时间:2013-09-02 10:45:23

标签: c++ linux networking tcp p2p

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

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

这是我的问题:

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

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

  3. 如果我想维护TCP连接,那么对等体如何决定谁将成为客户端以及谁是每对中的服务器?也许这可以在服务器端完成,当他向客户发送信息时。

  4. 我认为TCP连接在这种情况下并不理想,至少是因为客户端必须为网络中的每个对等体维护单独的连接。虽然这是一个更多的训练练习,我寻找可靠的连接,我不必处理一些丢包/乱序的可能性。 (在这个阶段:)。

    谢谢!

2 个答案:

答案 0 :(得分:1)

对于问题一,这取决于您的设计,但是定期向其他客户通知其他客户是一种方法。

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

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

这样的事情:

  1. 客户端A,B,C和D连接到服务器
  2. 客户端A向服务器发送查询
  3. 服务器将查询发送到客户端B,C和D
  4. 客户B和D回复说他们有查询的内容
  5. 服务器将信息发送回客户端A
  6. 客户端A连接到客户端B和D
  7. 现在,客户B和D充当客户端和服务器。它还解决了您的第一个问题,因为服务器只在需要时才发送有关其他客户端的信息。

答案 1 :(得分:1)

  1. 我认为答案是肯定的。
  2. 您也可以使用其他Linux IPC机制,例如共享内存,而不是同一服务器上的客户端的套接字
  3. 建立连接时区分服务器/客户端角色:服务器正在侦听/接受,客户端正在连接。建立连接后,它们处于对等关系中。