Когда я пытаюсь создать свою P2P-сеть в Python, мой первый узел работает как сервер, затем мой следующий узел сначала подключается к первому узлу в качестве клиента, а затем запускает собственный сервер для подключения следующего узла к. Я пытаюсь использовать многопоточность, чтобы получить его после того, как у меня есть несколько пиров, подключенных так:
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 просто берет сокет подключения