Asyncio не отправляет все данные изображения через TCPPython

Программы на Python
Ответить
Anonymous
 Asyncio не отправляет все данные изображения через TCP

Сообщение Anonymous »

Я пытаюсь отправить изображение со своего локального компьютера на компьютер в облаке, используя asyncio с протоколом TCP. Иногда мне отправляется все изображение, а иногда только часть изображения.

Код клиента

Код: Выделить всё

import os
os.environ['PYTHONASYNCIODEBUG'] = '1'
import asyncio
import logging

logging.basicConfig(level=logging.ERROR)
async def tcp_echo_client(data, loop):
reader, writer = await asyncio.open_connection(, 
,
loop=loop)
print('Sending data of size: %r' % str(len(data)))
writer.write(data)
await writer.drain()
#print("Message: %r" %(data))
print(type(data))
print('Close the socket')
writer.write_eof()
writer.close()

with open('sendpic0.jpg','rb') as f:
data=f.read()
loop = asyncio.get_event_loop()
loop.run_until_complete(tcp_echo_client(data, loop))
loop.close()
Код сервера:

Код: Выделить всё

import os
os.environ['PYTHONASYNCIODEBUG'] = '1'
import asyncio
import logging

logging.basicConfig(level=logging.ERROR)

async def handle_echo(reader, writer):

data = await reader.read()
addr = writer.get_extra_info('peername')
#print("Received %r from %r" % (message, addr))
print("Length of data recieved: %r" % (str(len(data))))
#with open('recvpic0.jpg','wb') as f:
#    f.write(data)
print("Close the client socket")
writer.close()
#print("Message: %r" %(data))
print("Received data of length: %r" %(str(len(data))))

loop = asyncio.get_event_loop()
data=b''
coro = asyncio.start_server(handle_echo, '', 
, loop=loop)
server = loop.run_until_complete(coro)
print("Received data of length: %r" %(str(len(data))))
# Serve requests until Ctrl+C is pressed
print('Serving on {}'.format(server.sockets[0].getsockname()))
try:
loop.run_forever()
except KeyboardInterrupt:
pass

# Close the server
server.close()
loop.run_until_complete(server.wait_closed())
loop.close()
Я специально не указал IP-адрес и номер порта, но это не должно иметь значения.

Вот результат:

вывод сервера

Код: Выделить всё

Received data of length: '0'
Serving on ('0.0.0.0', 50001)

Length of data recieved: '249216'
Close the client socket
Received data of length: '249216'

Length of data recieved: '250624'
Close the client socket
Received data of length: '250624'

Length of data recieved: '256403'
Close the client socket
Received data of length: '256403'
вывод клиента

Код: Выделить всё

$ python client.py
Sending data of size: '256403'
Close the socket
$ python client.py

Close the socket
$ python client.py
Sending data of size: '256403'

Close the socket
Я использую Python 3.6.

Я не знаю, нужен ли мне механизм проверки или отправлять данные частями? Я предполагаю, что все это произойдет автоматически с помощью функции чтения.

Я скорректировал код с этого сайта: http://asyncio.readthedocs.io/en/latest/ tcp_echo.html

Подробнее здесь: https://stackoverflow.com/questions/507 ... a-over-tcp
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»