当我尝试使用Python创建我的P2P网络时,我的第一个对等方充当服务器,然后我的下一个对等方首先作为客户端连接到第一个对等方,然后启动其自己的服务器供下一个对等方进行连接至。我正在尝试使用线程来获取它,因此在我有几个这样的对等连接之后:
P1 P2 P3
[server] [server] [server]
^----------[client] [client]
^-------------------------------------|
第三对等方可以向第一对等方(充当服务器)发送消息,然后该消息由第一对等方转发到第二对等方(充当客户端)。我不知道该怎么做。
我的主循环本质上是这样,其中join_ip和join_port是网络中要加入的新对等点的当前对等点,client_ip和client_port是随后应监听的传入对等点ip和端口>
def main():
if self.first_peer is False:
while True:
t = threading.Thread(self.connect_to_peer(join_ip, join_port)).start()
t2 = threading.Thread(self.become_server(self.client_ip, self.client_port)).start()
else:
while True:
t = threading.Thread(self.become_server(self.client_ip, self.client_port)).start()
def become_server(self, ip, port):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind((ip, (int(port))))
sock.listen(1)
while True:
c, a = sock.accept()
def connect_to_peer(self, ip, port):
peer_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
peer_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
wait_to_connect = True
while wait_to_connect:
try:
t = threading.Thread(peer_sock.connect((ip, (int(port))))).start()
wait_to_connect = False
except:
pass
self.connections.append((peer_sock, port))
self.connections_addresses.append((ip, str(int(port))))
self.connections_count += 1
然后上面引用的new_connection函数仅使用连接套接字