juvf 9 21 сентября, 2016 Опубликовано 21 сентября, 2016 · Жалоба Как взаимодействовать с БТ из винды? Начал использовать "Windows Sockets Support for Bluetooth" но чото лыжи не едут. Делаю следующий алгоритм с winsock Код socket(); connect(); send(sock, array, 8, 0); shutdown(sock, SD_SEND); recv(); если в дебаге прошагать, то всё прекрасно работает. создается сокет и конектиться без ошибок. удаленное устройство видит коннект. посылаются данные, удаленное устройство получает их и отвечает. recv() возвращает кол-во принятых байт. как в аптеке. если без остановки выполнить.... то send() возвращает 8, shutdown() возвращает 0, recv() возвращает 0. Удаленное устройство видит подключение, но не получает ни одного байта. если между этими функциями понаставить пауз секундных, то код выполняется без остановки нормально... уходит запрос и возвращается ответ. Почему без пауз не работает? Если из-за неблокирующего сокета, то как сокет сделать блокирующим? ps Может вместо этой API есть более годные либы для работы с bluetooth под винды? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aiwa 0 21 сентября, 2016 Опубликовано 21 сентября, 2016 · Жалоба Почему без пауз не работает? Если из-за неблокирующего сокета, то как сокет сделать блокирующим? Посмотрите наличие callback-функций для событий сокета - их использовать гораздо удобнее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
juvf 9 22 сентября, 2016 Опубликовано 22 сентября, 2016 · Жалоба Посмотрите наличие callback-функций для событий сокета - их использовать гораздо удобнее. Не катят колбаки..... у меня весь обмен вынесен в отдельный поток, поэтому колбаки неудобны. удобнее линейно-последовательно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aiwa 0 22 сентября, 2016 Опубликовано 22 сентября, 2016 · Жалоба Не катят колбаки..... у меня весь обмен вынесен в отдельный поток, поэтому колбаки неудобны. удобнее линейно-последовательно. Сразу после создания сокета вызывается функция установления его параметров. Среди этих параметров должен быть блокирующий/неблокирующий. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
juvf 9 22 сентября, 2016 Опубликовано 22 сентября, 2016 · Жалоба Сразу после создания сокета вызывается функция установления его параметров. Среди этих параметров должен быть блокирующий/неблокирующий. Но это у вас говорит здравый смысл, а не опыт работы с БТ. Мой здравый смысл тоже говорит, что сокет нужно както переключить в блокирующий режим. но как? Конкретно как? В winsock я этого не нашел. Нашел пример по созданию БЛОКИРУЮЩЕГО сокета на winsock.... но только для TCP.... но для БТ должен сокет также работать. Конкретно, как общаться с БТ? как заставить сокет ждать отправки по бт? Или какая библа для этого подходить лучше? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 2 22 сентября, 2016 Опубликовано 22 сентября, 2016 · Жалоба как заставить сокет ждать отправки по бт? Или какая библа для этого подходить лучше? Есть команда select как раз для ожиданий Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
juvf 9 22 сентября, 2016 Опубликовано 22 сентября, 2016 · Жалоба Есть команда select как раз для ожиданий я видел селект в winsock. Как его готовить? Не могу понять, как селект может помочь? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aiwa 0 23 сентября, 2016 Опубликовано 23 сентября, 2016 · Жалоба Посмотрел исходник, мне нужен был неблокирующий сокет. Я вызывал ioctlsocket с командой FIONBIO перевода сокета в неблокирующий режим. Насколько я понимаю Вам нужно проделать обратную операцию. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
juvf 9 23 сентября, 2016 Опубликовано 23 сентября, 2016 · Жалоба Посмотрел исходник, мне нужен был неблокирующий сокет. Я вызывал ioctlsocket с командой FIONBIO перевода сокета в неблокирующий режим. Насколько я понимаю Вам нужно проделать обратную операцию. а вам нужен был неблокирующий сокет Bluetooth? вы с сокетом bluetooth работали? по дефолту сокет блокирующий. чтоб он стал неблокирующим нужно сделать u_long iMode=1; ioctlsocket(sock,FIONBIO,&iMode); я в своём коде принудительно джелаю u_long iMode=0; ioctlsocket(sock,FIONBIO,&iMode); Не помогает. и ещё.... до кучи... если так и не пришел ответ.... то как сокет выйдет из recv()? Где то же должны задаваться таймауты ожидания. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aiwa 0 23 сентября, 2016 Опубликовано 23 сентября, 2016 · Жалоба а вам нужен был неблокирующий сокет Bluetooth? вы с сокетом bluetooth работали? Мне нужен был именно неблокирующий, а FIONBIO в устанавливал потому что предпочитаю не полагаться на умолчания, а прописать установку. Работал не с bluetooth, но предполагаю, что при создании сокета нужно указать блютузный тип протокола, а в остальном все аналогично. Не помогает. и ещё.... до кучи... если так и не пришел ответ.... то как сокет выйдет из recv()? Где то же должны задаваться таймауты ожидания. Я не пробовал, но по описанию таймауты для блокирующего устанавливаются в setsockopt: SO_RCVTIMEO - "Sets the timeout, in milliseconds, for blocking receive calls." Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться