3 回答
TA贡献1784条经验 获得超9个赞
根据文档, bufsize 参数仅指定要读取的最大数据量:
socket.recv(bufsize[, flags]) 从套接字接收数据。返回值是一个字节对象,表示接收到的数据。一次接收的最大数据量由 bufsize 指定。有关可选参数标志的含义,请参阅 Unix 手册页 recv(2);它默认为零。
为了确保完整的数据传输,可以使用这样的函数,它等待套接字连接的结束(由 recv 返回的空字符串表示):
def recv_all(connection):
"""
Function for all data
:param connection: socket connection
:return: received data
"""
data = list()
while True:
data.append(connection.recv(2048))
if not data[-1]:
return b''.join(data)
另一个可能更适合您的应用程序的示例可能是等待固定的消息大小(如您的问题所示为 1221):
def recv_message(connection):
data = list()
transferred_bytes= 0
while transferred_bytes < 1221:
data.append(connection.recv(min(1221-transferred_bytes, 2048)))
if not data[-1]:
raise RuntimeError("socket connection broken")
transferred_bytes += len(data[-1])
return b''.join(data)
添加回答
举报