Подскажите плз, какой преобрести bluetooth для работы с MS BT SDK.
Меня интересует производитель, максимальный радиус и максимальное кол-во коннектов.
Я так понимаю что драйвера под этот device должны входить в service pack 2 for XP.
смешно!!?
тогда смотри!:
#include "stdafx.h"
#include <winsock2.h>
#include <ws2bth.h>
#include <bthdef.h>
#include <BluetoothAPIs.h>
#include <stdio.h>
void main()
{
// Инициализация WinSock
WSADATA wsd;
WORD Version = MAKEWORD(2,2);
if (WSAStartup(Version,&wsd)!=0)
{
printf("WSAStartup error\n");
return;
}
{
BLUETOOTH_DEVICE_SEARCH_PARAMS bdsp;
BLUETOOTH_DEVICE_INFO bdi;
HBLUETOOTH_DEVICE_FIND hbf;
ZeroMemory(&bdsp, sizeof(BLUETOOTH_DEVICE_SEARCH_PARAMS));
bdsp.dwSize = sizeof(BLUETOOTH_DEVICE_SEARCH_PARAMS);
bdsp.fReturnAuthenticated = TRUE;
bdsp.fReturnRemembered = TRUE;
bdsp.fReturnUnknown = TRUE;
bdsp.fReturnConnected = TRUE;
bdsp.fIssueInquiry = TRUE;
bdsp.cTimeoutMultiplier = 10;
bdsp.hRadio = NULL;
bdi.dwSize = sizeof(bdi);
hbf = BluetoothFindFirstDevice(&bdsp, &bdi);
DWORD dwErr = GetLastError();
if (hbf != NULL)
{
char szDevName[MAX_PATH];
while(1)
{
memset(szDevName, 0x00, sizeof(szDevName));
sprintf(szDevName,"Name:%S", bdi.szName);
printf("Name:%S,Addr:%X, Class device:%d\n", bdi.szName, bdi.Address, bdi.ulClassofDevice);
if (BluetoothFindNextDevice(hbf, &bdi) == FALSE)
break;
}
BluetoothFindDeviceClose(hbf);
}
else
{
printf("Ne najden");
}
_______________________________________________________________________________________________________
=======================================================================================================
* вот до сюдова все работает замечательно! слов не нахожу! а вот ниже началась порнография!1 полная у меня опыта мало в системном программировании... так что!
SOCKET s = socket (AF_BTH, SOCK_STREAM, BTHPROTO_RFCOMM);
if (s == INVALID_SOCKET)
{
wprintf (L"Could not create socket: error %d\n", WSAGetLastError ());
return;
}
SOCKADDR_BTH sab;
sab.port=20;
memset (&sab, 0, sizeof(sab));
sab.addressFamily = AF_BTH;
//sab.serviceClassId = FaxServiceClass_UUI;
sab.btAddr = 0X60D1211F;
if (0 != connect (s, (sockaddr *)&sab, sizeof(sab)))
{
wprintf (L"Could not connect socket: error %d\n", WSAGetLastError ());
return;
}
===========================================================================================================
____________________________________________________________________________________________________________
* поидеи это вещь должна конектиться по мак адресу... а потом ниже я подымаю TCP соединение!
и вот ту как растоки зопа.. он у меня не конектиться!!!
/*{
//----------------------
// Create a SOCKET for connecting to server
SOCKET ConnectSocket;
ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (ConnectSocket == INVALID_SOCKET)
{
printf("Error at socket(): %ld\n", WSAGetLastError());
WSACleanup();
return;
}
//----------------------
// The sockaddr_in structure specifies the address family,
// IP address, and port of the server to be connected to.
sockaddr_in clientService;
clientService.sin_family = AF_INET;
clientService.sin_addr.s_addr = inet_addr("0X60D1211F");
clientService.sin_port = htons(5449);
//----------------------
// Connect to server.
if ( connect( ConnectSocket, (SOCKADDR*) &clientService, sizeof(clientService) ) == SOCKET_ERROR)
{
printf( "Failed to connect.\n" );
WSACleanup();
return;
}
{
printf("Connected to server.\n");
WSACleanup();
return;
}
}*/
}
}
Я проект не рихтовал выложил черновой вариант!!! так что не критикуйте по поводу обилия скобочек главное чтоб работал!
Жду помощи! а может и кому то помагу.. Мне это надо все в консольном варианте... так что с графикой не заморачивался!

сервис не тот, не посмотрел, кому надо подставят нужный а порт... к вашему сведенья не больше 30 портов поддерживает кстати можно написать что любой порт но он то же возьмет номер порта не больше 30... поставь свой 5449 или какой нибудь другой работать не будет...
void main()
{
WORD wVersionRequested = 0x202;
WSADATA m_data;
if ( ::WSAStartup( wVersionRequested, &m_data) != 0 )
{
printf("WSA failed\n");
return;
}
SOCKET sd = ::socket(AF_BTH, SOCK_STREAM, BTHPROTO_RFCOMM);
if (sd == INVALID_SOCKET)
{
printf("Failed to get bluetooth socket! %d\n", GetLastError());
::WSACleanup();
exit(1);
}
WSAPROTOCOL_INFO protocolInfo;
int protocolInfoSize = sizeof(protocolInfo);
if (0 != getsockopt(sd, SOL_SOCKET, SO_PROTOCOL_INFO, (char*)&protocolInfo, &protocolInfoSize))
{
printf("Failed to get socket option! %d\n", GetLastError());
::WSACleanup();
exit(1);
}
WSAQUERYSET querySet;
memset(&querySet, 0, sizeof(querySet));
querySet.dwSize = sizeof(querySet);
querySet.dwNameSpace = NS_BTH;
HANDLE hLookup;
DWORD flags = LUP_RETURN_NAME | LUP_CONTAINERS | LUP_RETURN_ADDR | LUP_FLUSHCACHE | LUP_RETURN_TYPE | LUP_RETURN_BLOB | LUP_RES_SERVICE| LUP_RETURN_ALL;
int result = WSALookupServiceBegin(&querySet, flags, &hLookup);
if ( result != 0 )
{
printf("Failed to lookup! %d\n", GetLastError());
::WSACleanup();
exit(1);
}
while (0 == result)
{
BYTE buffer[1000];
DWORD bufferLength = sizeof(buffer);
WSAQUERYSET *pResults = (WSAQUERYSET*)&buffer;
if ( ( result = WSALookupServiceNext(hLookup, flags, &bufferLength, pResults) ) == 0 )
{
wprintf( L"Found: %s\n", (char *)pResults->lpszServiceInstanceName );
SOCKADDR_BTH sab;
memset (&sab, 0, sizeof(sab));
sab.addressFamily = AF_BTH;
sab.serviceClassId = SerialPortServiceClass_UUID
sab.btAddr = 0x001060d120ce;
sab.port= 15;
if (0 != ( result = connect (sd, (sockaddr *)&sab, sizeof(sab))) )
{
wprintf (L"Could not connect socket: res = %d, error %d\n", result, WSAGetLastError ());
}
}
}
::WSACleanup();
}
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void main()
{
// Инициализация WinSock
WSADATA wsd;
WORD Version = MAKEWORD(2,2);
if (WSAStartup(Version,&wsd)!=0)
{
printf("WSAStartup error\n");
return;
}
//============================================================================================================
// Поиск первого Bluetooth устройства установленного на компьютере
HANDLE hRadio;
BLUETOOTH_FIND_RADIO_PARAMS btfrp;
HBLUETOOTH_RADIO_FIND hFind;
BLUETOOTH_RADIO_INFO RadioInfo= {0};
btfrp.dwSize = sizeof(btfrp);
hFind = BluetoothFindFirstRadio(&btfrp,&hRadio);
if (hFind != 0) {
printf("Local radio module is found\n");
} else {
printf("Nothing is found\n");
return;
}
BLUETOOTH_DEVICE_SEARCH_PARAMS bdsp;
BLUETOOTH_DEVICE_INFO bdi;
HBLUETOOTH_DEVICE_FIND hbf;
ZeroMemory(&bdsp, sizeof(BLUETOOTH_DEVICE_SEARCH_PARAMS));
bdsp.dwSize = sizeof(BLUETOOTH_DEVICE_SEARCH_PARAMS);
bdsp.fReturnAuthenticated = TRUE;
bdsp.fReturnRemembered = TRUE;
bdsp.fReturnUnknown = TRUE;
bdsp.fReturnConnected = TRUE;
bdsp.fIssueInquiry = TRUE;
bdsp.cTimeoutMultiplier = 10;
bdsp.hRadio = NULL;
bdi.dwSize = sizeof(bdi);
hbf = BluetoothFindFirstDevice(&bdsp, &bdi);
DWORD dwErr = GetLastError();
if (hbf != NULL)
{
char szDevName[MAX_PATH];
while(1)
{
memset(szDevName, 0x00, sizeof(szDevName));
sprintf(szDevName,"Name:%S", bdi.szName);
printf("Name:%S, Addr:%X, Class device:%d\n", bdi.szName, bdi.Address, bdi.ulClassofDevice);
if (BluetoothFindNextDevice(hbf, &bdi) == FALSE)
break;
}
BluetoothFindDeviceClose(hbf);
}
else
{
printf("Proverte nastrojki Bluetooth (flag obnaryzhenija)\n");
}
/* {
//================================================================================================================
// Bluetooth соединение
SOCKET s = socket (AF_BTH, SOCK_STREAM, BTHPROTO_RFCOMM);
if (s == INVALID_SOCKET)
{
printf ("Could not create socket: error %d\n", WSAGetLastError ());
return;
}
SOCKADDR_BTH sab;
memset (&sab, 0, sizeof(sab));
//sab.serviceClassId = ("16");
sab.addressFamily = AF_BTH;
//sab.serviceClassId = GenericNetworkingServiceClass_UUID;
sab.serviceClassId = SerialPortServiceClass_UUID;
sab.btAddr = 0x001060d120ce;
sab.port= 15;
//=================================================================================================================
/*
(PANUServiceClass_UUID, NAPServiceClass_UUID, GNServiceClass_UUID)
Личная сеть (PAN)
Используйте эту службу для подключения к точке входа в сеть (NAP),
поддерживающей Bluetooth, или к групповой специальной сети (GN).
-------------------------------------------------------------------------------------------------------
SerialPortServiceClass_UUID
Последовательные порты
Используйте последовательные порты для синхронизации устройства, поддерживающего Bluetooth,
такого как личный цифровой помощник (PDA) или мобильный телефон, с компьютером пользователя.
Можно также использовать последовательные порты для передачи данных из устройства глобальной системы
навигации (GPS) в компьютер пользователя.
-------------------------------------------------------------------------------------------------------
OBEXObjectPushServiceClass_UUID
Передача файлов с помощью протокола Object Exchange (OBEX) File Push
Используйте эту службу для передачи файлов или данных из компьютера в другое устройство, поддерживающее Bluetooth.
==================================================================================================================== */
/*
if (0 != connect (s, (sockaddr *)&sab, sizeof(sab)))
{
wprintf (L"Could not connect socket: error %d\n", WSAGetLastError ());
return;
}*/
//==================================================================================================================
// Create a SOCKET for connecting to server
SOCKET ConnectSocket;
ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (ConnectSocket == INVALID_SOCKET)
{
printf("Error at socket(): %ld\n", WSAGetLastError());
WSACleanup();
return;
}
//----------------------
// The sockaddr_in structure specifies the address family,
// IP address, and port of the server to be connected to.
sockaddr_in clientService;
clientService.sin_family = AF_INET;
clientService.sin_addr.s_addr = inet_addr("192.168.20.11");
clientService.sin_port = 15;
//----------------------
// Connect to server.
if ( connect( ConnectSocket, (SOCKADDR*) &clientService, sizeof(clientService) ) == SOCKET_ERROR)
{
printf( "Failed to connect.\n" );
WSACleanup();
return;
}
{
printf("Connected to server.\n");
WSACleanup();
return;
}
}
//}
Огромное спасибо Ольге Борисовне, и психопату индусу.. за коррекцию и исправление ошибок....
Текст содержыт ошибки кое чего не хватает.. ну чтоб не сдирали под частую а прониклись философией!))))
Если кому надо вышлю и клиент и сервер под Win и Linux... кстати совместимость 100%
TCP мне поднять не удалось... если у кого получилось.. буду ждать..
А хакеру что писал Выше: "Читай MSDN"!!!!!!!!!!!!!!!!!!!!!!
Наезды удалены — AS
Здравствуйте, Падла, Вы писали:
П>
сервис не тот, не посмотрел, кому надо подставят нужный а порт... к вашему сведенья не больше 30 портов поддерживает кстати можно написать что любой порт но он то же возьмет номер порта не больше 30... поставь свой 5449 или какой нибудь другой работать не будет...
П>А хакеру что писал Выше: "Читай MSDN"!!!!!!!!!!!!!!!!!!!!!!
Дело было вечером, делать было нечего — решил ответить.
Я тут поскипал кучу никому не нужного и глючного кода (IMHO). Так что просьба ногами не пинать.
А собственно зацепило только вышеприведенное предложение. И так. Читаем MSDN.
Значит, следую спецификации Bluetooth Core 1.2 и Bluetooth Core 2.0 все вышеуказанные сервисы (а именно Bluetooth профили) работают по протоколу rfcomm (верхний уровень, я не буду здесь долго рассуждать про l2cap, который ниже и рассматривать PDU и пакеты самого RF канала, думаю это не особо интересно). Так вот. RFCOMM. Дл яначала определимся, что же такое порт? А порт — есть номер RFCOMM канала. Согласен, что спецификацией заявлено, НО НЕ ОГРАНИЧЕНО их максимальное количество в 30 штук (BT 2.0 сие ограничение снимает).
Далее. Для того чтобы понять, что такое RFCOMM Channel и как нам "указать его" необходимо разобраться с тем, что такое SDP и как сервисы регистрируют себя в SDP database records и как работает протокол SDP.
Все это можно прочитать в спецификации.
А вот теперь конкретное замечание. Если ты, друг мой, установишь сервис ObjectPush, на пример, и укажешь порт, например 11, то нет НИКАКОЙ гарантии, что подключишься ты именно к сервису ObjectPush. Даже указав сервис ObjectPush и порт BT_PORT_ANY ты опять не получишь таких гарантий.
Почему? А вот про это почитай в документации и спецификации.
P.S. Прежде чем что-то утверждать и спорить — будь добр изучить предмет.