11

我正在尝试在 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()

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

4

1 回答 1

9

是的,需要两个插座。监听套接字应该在一个恒定端口上打开,而客户端端口应该在另一个(可能是动态的)端口上打开,通常在端口范围内更高。举个例子:

端口 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 套接字通常也运行在单独的线程上,因为它们是阻塞的。

于 2014-04-24T11:26:59.190 回答