我正在使用ftp套接字在python中创建一个文件服务器,其中多个客户端将图像发送到服务器。这是我用来在服务器端接收图像的方法:
while True:
data = client.recv(512)
if not data:
break
file.write(data)
这是我用来将图像发送到服务器的方法:
while True:
data = file.read(512)
if not data:
break
server.send(data)
我遇到的问题是,在服务器端,while循环永远不会退出,这意味着代码要么停留在recv调用中,要么if语句永远不会为真。在客户端没有问题,循环正常退出。我听说客户端会向服务器发送一些东西告诉它停止但是if语句似乎没有把它拿起来。如何在不关闭连接的情况下让服务器停止尝试接收?
答案 0 :(得分:0)
https://docs.python.org/2/howto/sockets.html#disconnecting
在客户端上,关闭服务器的套接字。在服务器上,检查recv是否返回0字节。
同样来自documentation for using a socket:
当recv返回0个字节时,表示另一侧已关闭(或者是 在关闭的过程中)连接。你不会收到任何 有关此连接的更多数据。永远。您可以发送数据 成功;我稍后会谈到这个。
答案 1 :(得分:0)
除非客户端关闭连接,否则数据永远不会是什么。
server.close()