Python Sockets Peer to Peer

use*_*150 6 python networking p2p tcp peer

我正在尝试在Python 2.7中创建一个简单的对等网络.问题是,我似乎无法在两台机器之间创建连接,在这两台机器上它们都充当服务器和客户机.当一个是服务器而另一个是客户端时,我可以让它工作,但两者都不是.我需要创建2个插座吗?我也使用TCP连接.

更新:

import socket, sys               # Import socket module

s = socket.socket()         # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345                # Reserve a port for your service.
s.bind((host, port))        # Bind to the port

if sys.argv[1] == "connect":
    host = sys.argv[2]
    s.connect((host, port))
    s.close 
else:
    s.listen(5)                 # Now wait for client connection.
    while True:
       c, addr = s.accept()     # Establish connection with client.
       print 'Got connection from', addr
       c.send('Thank you for connecting')
       c.close()
Run Code Online (Sandbox Code Playgroud)

代码不是很好,因为有人作为客户端连接,他们必须使用参数"connect",后跟第二台机器的主机名或IP.我无法让两者同时连接并互相服务.

Cha*_*ams 6

是的,需要两个插座.侦听套接字应在常量端口上打开,客户端端口应在不同(可能是动态)端口上打开,通常在端口范围内更高.举个例子:

端口1500上的服务器套接字,端口1501上的客户端套接字.

同行1:192.168.1.101

同行2:192.168.1.102

当peer1连接到peer2时,它看起来像这样:192.168.1.101:1501 - > 192.168.1.102:1500.

当peer2连接到peer1时,它看起来像这样:192.168.1.102:1501 - > 192.168.1.101:1500.

侦听TCP套接字通常也在单独的线程上运行,因为它们是阻塞的.

  • 如何从第一个对等点获取第二个对等点的 IP 地址?我们必须手动输入他们的IP地址吗? (3认同)