我是套接字编程的新手,正在尝试理解套接字是如何工作的。目前,我正在尝试使用python套接字库,看看它是如何工作的。在
现在有几件事我无法完全理解。 让我们举一个例子,如here所示,一个使用python套接字库用python编写的简单echo客户机和服务器。在
echo服务器如下所示 #回声_服务器.py 导入套接字
host = '' # Symbolic name meaning all available interfaces
port = 12345 # Arbitrary non-privileged port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host, port))
s.listen(1)
conn, addr = s.accept()
print('Connected by', addr)
while True:
data = conn.recv(1024)
if not data: break
conn.sendall(data)
conn.close()
echo客户端如下所示
^{pr2}$我的问题
Now what happens when another client also connects to this server? Does the conn and addr variables get overwritten with the new values? Or how is it handled?
Is there some simple practical example to demo this ?
在您的例子中,不会发生任何有趣的事情。尝试连接将挂起。对
connect()
的每个客户端调用都必须与对accept()
的服务器调用匹配。由于只调用accept()
一次,最多只能有一个客户端连接。在如果希望能够连续地接受来自后续客户端的连接,请尝试以下操作:
如果您希望能够并行地接受来自客户端的连接,即同时从多个客户端接收连接,那么您还有更多的工作要做。但这并不是你今天的问题。在
正如Rob在另一个答案中指出的,您的代码将只接受一个客户机。必须为来自客户端的任何连接请求调用
accept
。并相应地编码。现在来回答你的问题,是的,(conn,addr)对将被覆盖。在再次调用accept
进行新连接之前,代码应该负责将它们传递给某个连接线程。在在用于接受多个客户端的更新代码中,尝试在几个连接之后不调用
accept
,并注意TCP连接状态表(例如,netstat
)以查看backlog的变化值的行为。在相关问题 更多 >
编程相关推荐