如何区分p2p网络中同一台机器上运行的节点,C语言的套接字

时间:2014-04-23 20:47:02

标签: c sockets network-programming p2p

我想建立一个完整的网络(每个节点连接到剩余的节点)。我有一群同行,比方说它包括P2P1,P2P2,P2P3。假设所有对等体都在同一台机器上运行(localhost)。每个对等体都有一个客户端和服务器端,它们都写在同一个文件中。

首先将P2P1初始化为“p2p Name_of_group Port_Number_for_Server_Side”。然后 P2P2为“p2p Name_of_group Port_Number_for_Server_Side Port_Number_of_P2P1”。然后 P2P3为“p2p Name_of_group Port_Number_for_Server_Side Port_Number_of_P2P2”。

P2P2的客户端连接到P2P1的服务器端,P2P3的客户端连接到P2P2的服务器端。

现在P2P1连接到P2P3(自动代码,而不是用户)。如果有一个新的对等体,就说P2P4,也想连接到P2P1(由用户)。我如何区分P2P3作为旧对等体和P2P4作为新对等体,因为它们都是第一次只连接()到P2P1(还不是send())?。

此外,我考虑使用“hostname:port”来区分它们,但由于它们在同一台机器上运行(主机名相似),而端口是客户端端口(不是每个对等端唯一的服务器端口,每个peer有很多客户端端口)。当P2P2连接到P2P1时,P2P1被告知P2P2加入了该组(包括P2P1和P2P2)。当P2P3连接到P2P2时,P2P2被告知P2P3加入了该组。然而,P2P1的P2P2的名称与P2P3的P2P2的名称不同,因为连接到P2P1的P2P2的客户端端口与连接到P2P3的P2P2的客户端端口不同。我想要一个P2P2的唯一名称,我该怎么做?非常感谢您的评论。

1 个答案:

答案 0 :(得分:0)

老实说,你在命名方案中失去了我。

让我重新解释一下这个问题。

A server accepts two connections. Is there a way to tell that both
connections are initiated by the same agent?

如果这是您想要回答的问题,答案是否定的。服务器当时唯一的信息是getpeername返回的信息,在您的方案中,它不会识别连接代理。

您可以考虑为每个代理分配一个单独的客户端端口范围。或者在协议中添加握手阶段。