[英]Python socket recv data in while loop not stopping
当我尝试使用while loop
来接收数据时,即使没有数据,循环也不会停止
import socket
class Connect:
connect = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
def __init__(self, server_ip, server_port):
self.connect.connect((server_ip, server_port))
def recv(self):
data_ls = []
while True:
data = self.connect.recv(2048)
if not data: # after getting the first data
break # Python wont come to this "if" so it wont break!
data = data.decode('utf-8')
data_ls.append(data)
return data_ls
因为socket.recv
是阻塞调用。 这意味着您的程序将被暂停,直到您请求的数据量(2048字节)可以接收为止。
您可以设置等待数据的时间限制:
socket.settimeout(seconds_to_wait_for_data)
或者,您可以使套接字不阻塞:
sock.setblocking(False)
请注意,在您当前的实现中,您的代码可能会忙于等待数据可用,从而可能使用比必要数量更多的系统资源。 您可以通过以下方法防止这种情况:
Content-Length
标头)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.