请帮帮我 我在python(python 2.7)中使用asyncore代码服务器。
with packet(是数组字节)具有len(数据包)< 1288:发送确定。
但是数据包有len(数据包)> 1288,我调用socket.send(packet_byte),客户端没有recv完整数据
P / S: 客户回忆:
print 'Received:', data, len(data)
...."e0 ng\u00e0y th\u1ee9 bao nhi\u00eau c\u1ee7a th\u00e1ng \u0111\u1ea7u ti\u00ean c\u1ee7a n\u0103m d\u01b0\u01a1ng l\u1ecbch ho\u1eb7c n\u0103m t\u00e0i ch\u00ednh \u0111\u1ed1i v\u1edbi lo\u1ea1i thu\u1ebf khai v\u00e0 n\u1ed9p theo n\u0103m?", "answers": ["Ng\u00e0y 10", 1288
答案 0 :(得分:0)
嗯,它没有必要。根据" socket"文档:
send()返回发送的字节数。应用程序负责 检查是否已发送所有数据;如果只有一些数据 传输,应用程序需要尝试传递 剩下的数据。
这里有来自https://docs.python.org/2/howto/sockets.html#socket-howto的稍微修改的示例实现:
def mysend(sock, msg):
totalsent = 0
while totalsent < MSGLEN:
sent = sock.send(msg[totalsent:])
if sent == 0:
raise RuntimeError("socket connection broken")
totalsent = totalsent + sent
注意:事实上,asyncore不需要直接处理套接字。 Asyncore为您包装(考虑继承 asyncore.dispatcher_with_send 并使用其 send()方法)。