我正在学习网络编程,我想创建一个基于TCP连接的简单P2P网络。
到目前为止,我有一台服务器接受来自客户端(TCP)的连接。客户了解服务器的初始位置。
这是我的问题:
服务器如何通知客户彼此?是否只需向每个人发送每个机构IP地址列表?
如果所有客户端都在同一台机器上运行(例如127.0.0.1),那么在相互连接时是否需要使用不同的端口号?
如果我想维护TCP连接,那么对等体如何决定谁将成为客户端以及谁是每对中的服务器?也许这可以在服务器端完成,当他向客户发送信息时。
我认为TCP连接在这种情况下并不理想,至少是因为客户端必须为网络中的每个对等体维护单独的连接。虽然这是一个更多的训练练习,我寻找可靠的连接,我不必处理一些丢包/乱序的可能性。 (在这个阶段:)。
谢谢!
答案 0 :(得分:1)
对于问题一,这取决于您的设计,但是定期向其他客户通知其他客户是一种方法。
至于第二个问题,如果客户端也应该充当其他客户端的服务器,那么他们别无选择,因为每个客户端都需要绑定到本地地址(ip-address / port-number对),如果有的话使用特定IP地址上的端口然后你必须选择另一个。这可以通过在绑定时将端口设置为零来自动执行,操作系统将为您选择一个端口。
至于第三个问题,为什么客户端既不是客户端又是服务器?客户端连接到中央服务器,中央服务器跟踪网络中的所有客户端,并且可能还处理来自客户端的查询。当中央服务器收到查询时,它会将其发送给所有其他连接的客户端,并向查询客户端回复有关其搜索的其他客户端的信息。然后,原始客户端连接到其搜索的任何客户端,然后这些客户端充当原始客户端的服务器。
这样的事情:
现在,客户B和D充当客户端和服务器。它还解决了您的第一个问题,因为服务器只在需要时才发送有关其他客户端的信息。
答案 1 :(得分:1)