[闲聊] 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