繁体   English   中英

您如何使用线程在Python中跨点对点网络进行通信?

[英]How do you use threading to communicate across a peer to peer network in Python?

当我尝试用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函数只使用连接套接字

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM