Почему функция socket.send(array_byte) не отправляет полные данные?
Пожалуйста, помогите мне, я использую Asyncore для кодирования сервера в Python (Python 2.7).
с пакетом (является байтом массива) есть len (пакет) < 1288: отправить нормально.
но с пакетом len (пакет) > 1288, я вызываю socket.send(packet_byte), клиент не получает полные данные
p/s: клиент recv:
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 ответ
Ну, это не обязательно. Согласно "сокету" документов:
send() Возвращает количество отправленных байтов. Приложения отвечают за проверку того, что все данные были отправлены; если были переданы только некоторые данные, приложение должно попытаться доставить оставшиеся данные.
И вот немного измененный пример реализации из https://docs.python.org/2/howto/sockets.html:
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()).