3 回答

TA貢獻1784條經(jīng)驗 獲得超9個贊
根據(jù)文檔, bufsize 參數(shù)僅指定要讀取的最大數(shù)據(jù)量:
socket.recv(bufsize[, flags]) 從套接字接收數(shù)據(jù)。返回值是一個字節(jié)對象,表示接收到的數(shù)據(jù)。一次接收的最大數(shù)據(jù)量由 bufsize 指定。有關(guān)可選參數(shù)標(biāo)志的含義,請參閱 Unix 手冊頁 recv(2);它默認(rèn)為零。
為了確保完整的數(shù)據(jù)傳輸,可以使用這樣的函數(shù),它等待套接字連接的結(jié)束(由 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)
另一個可能更適合您的應(yīng)用程序的示例可能是等待固定的消息大小(如您的問題所示為 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)
添加回答
舉報