[閒聊] python 大師請進 sock

作者: JerryChungYC (JerryChung)   2024-05-09 23:38:56
import socket
sock = socket.socket()
sock,connect((server, port))
while True:
resp = sock.recv(8192).decode('utf-8')
dt = datetime.now()
print(f'{dt} {resp}')
if len(resp) == 0:
break
遇到錯誤是
resp = sock.recv(8192).decode('utf-8')
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe6 in position 1451: unexpected end of data
這是因為內容太長 超過8192被截斷 導致解碼錯誤嗎?是的話 recv 應該設多少比較好
ChatGPT的回答有個方式
data = b''
while True:
chunk = sock.recv(8192)
if not chunk:
break
data += chunk
try:
resp = data.decode('utf-8')
except UnicodeDecodeError as e:
print(f'解碼錯誤: {e}')
這個接收方式 while 應該要放在哪?
然後它收到的下一個數據是這輪沒接收完的 還是下一輪的數據
作者: Apache (阿帕契)   2024-05-09 23:40:00
你的protocol最好有header去表示packet length

Links booklink

Contact Us: admin [ a t ] ucptt.com