| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Сети > Bluetooth в Windows |
| Автор: juvf 22.9.2016, 10:14 | ||
| Как взаимодействовать с БТ из винды? Начал использовать "Windows Sockets Support for Bluetooth" но чото лыжи не едут. Делаю следующий алгоритм с winsock Код
если в дебаге прошагать, то всё прекрасно работает. создается сокет и конектиться без ошибок. удаленное устройство видит коннект. посылаются данные, удаленое устройство получает их и отвечает. recv() возвращает кол-во принятых байт. как в аптеке. если без остановки выполнить.... то send() возвращает 8, shutdown() возвращает 0, recv() возвращает 0. Удаленное устройство видит подключение, но не получает ни одного байта. если между этими функциями понаставить пауз секундных, то код выполняется без остановки нормально... уходит запрос и возвращается ответ. Почему без пауз не работает? Если из-за неблокирующего сокета, то как сокет сделать блокирующим? ps Может вместо этой API есть более годные либы для работы с bluetooth под винды? |
| Автор: feodorv 22.9.2016, 10:45 |
С неблокирующими сокетами данные же нужно подождать, пока придут. Если просто вызвать recv(), то система заглянет в буфер приёма, увидит, что он пуст, и вернёт 0. Всё правильно. А ждать данные в винде можно через WSAEVENT/WSAWaitForMultipleEvents или через select. |
| Автор: juvf 22.9.2016, 11:05 | ||
да у меня даже отправки нет.... send(sock, array, 8, 0); видать помещает данные в буфер передачи и сразу вызвращается.... а следом идет shutdown(sock, SD_SEND); Удаленное устройство по БТ не получает ни одного байта.
Я пробовал через селект..... не получилось. Есть пример работы с скоетами через селект? |
| Автор: feodorv 22.9.2016, 13:15 | ||
Да. Оно не должно помешать:
Это не понятно. Это точно установлено? А в случае с блокируемыми сокетами всё было в порядке? Внятного примера у меня не нашлось, давно работаю через события (чего и Вам желаю). Отличия от юниксовского подхода есть (в основном в области обработки ошибок), но мало. В инете примеры https://forum.antichat.ru/threads/124863/. |
| Автор: juvf 22.9.2016, 14:03 | ||||||||
Добавлено через 9 минут и 49 секунд
|
| Автор: juvf 23.9.2016, 13:43 | ||||||||
зато такой код работает
ps хотя если сокет вывалится по таймауту, то send или recv тернёт WSAETIMEDOUT, но этого не происходит. |
| Автор: feodorv 25.9.2016, 13:18 |
Честно говоря, не знаю в чём дело. Возможно, в параметрах открытия сокета, ведь их Вы не привели. Первые ссылки по двум ключевым словам "bluetooth" и "socket" дают искомый результат. Например, http://www.winsocketdotnetworkprogramming.com/winsock2programming/winsock2advancedotherprotocol4p.html. http://www.winsocketdotnetworkprogramming.com/winsock2programming/winsock2advancedotherprotocol4j.html, как получить адрес. |
| Автор: juvf 25.9.2016, 13:22 | ||||||
за ссылки спасибо! Добавлено через 3 минуты и 57 секунд и до кучи передача и прием
Добавлено через 12 минут и 2 секунды ps забегая вперёд..... вот работая с обычным компортом или с бинарным ТСП сокетом я обмен осуществлял так -открытие компорта -отправка запроса -ожидание ответа -обработка ответа -отправка запроса -приме и отбработка ответа ..... .... -закрытие порта как с блютузом и сокетами в этом случае? получается так -открытие сокета блютуза -отправка запроса -закрытие передачи (шатдаун сенд) -ожидание ответа -обработка ответа -... а дальше? можно сразу посылать новый запрос? там был сделан шатдаунд сенд. как после этого делать передачу? или после приема надо сделать шатдаунт приема и делать передачу? или надо открыть и закрыть сокет? |
| Автор: feodorv 30.9.2016, 06:53 | ||||
| Прошу прощения за долгое молчание http://www.winsocketdotnetworkprogramming.com/winsock2programming/winsock2advancedotherprotocol4o.html можно найти такую фразу:
Всё зависит от того, как на той стороне работает сервер. Если он способен только на один запрос-ответ, то придется каждый раз открывать новое соединение, а затем его закрывать. Если же сервер может обрабатывать множественные запросы, то, конечно, можно обойтись одним сокетом. Очень надеюсь, что у Вас что-нибудь разрешилось за это время |
| Автор: juvf 30.9.2016, 07:07 | ||
|