С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
0 / 0 / 0
Регистрация: 26.07.2017
Сообщений: 5

Socket.timeout при повторном recv()

26.07.2017, 15:00. Показов 4195. Ответов 3

Студворк — интернет-сервис помощи студентам
Python 3.5 Windows

Есть некая железка на микроконтроллере , работающая по TCP/IP , на ней используется LWIP.
Принцип ее работы прост - получает команду (256 байт ) - отдает ответ (256 байт)
В этом режиме все хорошо, и никаких проблем и вопросов.
Но есть часть команд, по которым железка отдает текущие данные , то есть сначала выстреливает заголовок (256 байт) , потом миллисекундная пауза и она начинает отдавать текущие данные по мере поступления, предопределенной ранее в команде длины, весь процесс может занимать до нескольких минут. Пока железка в режиме отдачи текущих данных - на другие команды не реагирует. В Дельфях и C# никаких проблем , получаю событие WSocket1DataAvailable в нем делаю Len := WSocket1.Receive(...) имею текущий буфер и его длину, могу по мере поступления данных их отображать.

В Питоне же могу получить только первый recv() - получаю всегда заголовок, вне зависимости от того что в параметрах recv() 256 байт, все последующие recv или recv_into вылетают с socket.timeout.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
conn = socket.socket()
conn.settimeout( 2.0)
conn.connect( (IP, PORT) )
 
conn.send(buffer_out)  # в buffer_out команда
 
s1=conn.recv(256)  # заголовок принимается , даже если s1=conn.recv(1024) получаю 256 байт
buffer_in = bytearray(TotalByte)
view = memoryview(buffer_in)
while TotalByte:
        try:
            nbytes = conn.recv_into(view, TotalByte)  
        except socket.timeout:
            print ('Socket timeout')
            continue        
        except:
            traceback.print_exc()
            print ('Socket err,)
            break
        view = view[nbytes:] 
        TotalByte -= nbytes
просто s2=recv(1024) пробовал . То же самое.
Понятно что просто Питона не знаю. Как написать правильно?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.07.2017, 15:00
Ответы с готовыми решениями:

Как отловить ошибку socket.timeout: timed out
Запрос на котором возникает ошибка self.proxy = {'http': 'socks5://181.101.35.69:1080', 'https': 'socks5://181.101.35.69:1080'} ...

Assembler linux. Socket recv and socket send invalid arguments
Пишу шеллкод. Он ожидает подключения с 2222 порта, сам подключается на 1111 порт, выделяет память, и должен выполняться пересылка сообщений...

socket recv
Есть ответ от сервера который приходит в виде: http://img850.imageshack.us/f/recv.png/ а с помощью функции recv я получаю только...

3
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
26.07.2017, 17:24
Не уверен, что проблема в этом, но загляните сюда
Socket Programming HOWTO
и обратите внимание на функцию myreceive.
Чтение из сокета не гарантирует немедленного возврата того объема данных, который вы запросили. Поэтому нужно читать в цикле указанным в документации способом.
0
0 / 0 / 0
Регистрация: 26.07.2017
Сообщений: 5
27.07.2017, 11:05  [ТС]
Засунул сокет в поток - все чудесным образом заработало.
Впрочем, все равно собирался.
Ну и причина любому Windows-ятнику должна быть понятна )
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
29.07.2017, 15:25
Цитата Сообщение от fil1111 Посмотреть сообщение
Ну и причина любому Windows-ятнику должна быть понятна )
Можно всё же озвучить причину для чайников?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.07.2017, 15:25
Помогаю со студенческими работами здесь

recv (socket api)
при первом в хождении в цикл рекв возвращает как положено количество принятых байт,но потом постоянно возвращает 1 почему? int size; ...

SOCKET: send(), recv()
Начал разбираться с сокетами и в самом начале застрял на элементарном, с функциями send и recv, в програмке в которой сервер отправляет...

Send/recv on listener socket
После переведения сокета в режим прослушивания (bind, listen), возможны ли на нем операции send/recv и к чему они приведут? Из документации...

Получить внешний ip, socket,recv( ), win
вопрос очень простой, почему данный код, прекрасно работающий на win7, не работает на win10 (не определяет ip) string GetExternalIP( ) ...

Обработка функции recv структуры SOCKET
Прошу помощи как обработать полученную информацию из функции recv структуры SOCKET. к примеру: char buf="GooD";char mass;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru