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

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

26.07.2017, 15:00. Показов 4238. Ответов 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
 Аватар для Рыжий Лис
5973 / 3735 / 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
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru