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)
添加回答
舉報