我想建立一个完整的网络(每个节点都连接到其余节点)。我有一组同龄人,可以说它包括P2P1,P2P2,P2P3。假设所有同位体都在同一台计算机(本地主机)上运行。每个对等方都有写入同一文件的客户端和服务器端。
首先将P2P1初始化为“ p2p Name_of_group Port_Number_for_Server_Side”。然后
P2P2作为“ p2p组端口名_服务器端_端口名_P2P1的名称”。接着
P2P3作为“ p2p组名称_Port_Number_for_Server_Side Port_Number_of_P2P2”。
P2P2的客户端连接到P2P1的服务器端,P2P3的客户端连接到P2P2的服务器端。
现在,P2P1连接到P2P3(自动以代码形式,而不是来自用户)。如果有一个新的对等方,假设P2P4,也想连接到P2P1(由用户)。我如何区分作为旧对等体的P2P3和作为新对等体的P2P4,因为它们两者都在第一次时仅将connect()连接到P2P1(还没有send())?
此外,我考虑使用“主机名:端口”来区分它们,但是由于它们运行在同一台计算机上(主机名相似),并且端口是客户端端口(不是每个对等方独有的服务器端口,因此每个对等方都有很多客户端端口)。当P2P2连接到P2P1时,将通知P2P1加入该组(包括P2P1和P2P2)。当P2P3连接到P2P2时,将通知P2P2加入该组。但是,P2P1上的P2P2名称与P2P3上的P2P2名称不同,因为连接到P2P1的P2P2的客户端端口与连接到P2P3的P2P2的客户端端口不同。我想要P2P2的唯一名称,该怎么办?非常感谢您的评论。
最佳答案
老实说,您在命名方案中迷失了我。
我再改一下这个问题。
A server accepts two connections. Is there a way to tell that both
connections are initiated by the same agent?
如果这是您要回答的问题,则答案为否。服务器当时拥有的唯一信息是
getpeername
返回的信息,在您的情况中,该信息无法识别连接代理。您可以考虑为每个代理分配单独的客户端端口范围。或在协议中添加握手阶段。