问题:
socket 通信, 通信过程是先发送消息长度, 再发送消息内容.
出现问题是, client 收到 ConnectionResetError: [Errno 104] Connection reset by peer. 原因是服务端 recv_into 接收不全报异常断开了连接.
原因: 可能是 tcp 粘包问题
原服务端代码:
import socket
from struct import pack, unpack
sck = socket.create_connection(ADDRESS)
sck.setblocking(True)
resp = bytearray(4)
if sck.recv_into(resp, 4) != 4:
raise
rlen = unpack('>i', resp)[0]
resp = bytearray(rlen)
sck.settimeout(1)
recv_len = sck.recv_into(resp, rlen)
if recv_len != rlen:
raise
if PY3:
resp = resp.decod