为什么函数socket.send(array_byte)不发送完整数据?

时间:2014-08-09 12:33:20

标签: sockets python-2.7 bytearray asyncore

请帮帮我 我在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

1 个答案:

答案 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()方法)。