Код ошибки 10049 bluetooth
Я пытаюсь установить соединение с настраиваемым устройством Bluetooth без использования COM-портов. Однако я получаю сообщение об ошибке: [10049] «Запрошенный адрес недействителен в своем контексте». Что я делаю неправильно? static Guid serviceClass= new Guid(«4d36e978-e325-11ce-bfc1-08002be10318».
Я пытаюсь установить соединение с настраиваемым устройством Bluetooth без использования COM-портов. Однако я получаю сообщение об ошибке: [10049] «Запрошенный адрес недействителен в своем контексте». Что я делаю неправильно?
static Guid serviceClass= new Guid("4d36e978-e325-11ce-bfc1-08002be10318"); //GUID of device class static BluetoothAddress addr = BluetoothAddress.Parse("001210160177"); //from device BluetoothDeviceInfo device = new BluetoothDeviceInfo(addr); device.SetServiceState(serviceClass, true); Console.WriteLine(BluetoothSecurity.PairRequest(device.DeviceAddress, "0000")); //pairing my device - writes True BluetoothEndPoint ep = new BluetoothEndPoint(addr, serviceClass); BluetoothClient conn = new BluetoothClient(ep); //10049 error conn.Connect(ep); Console.WriteLine(conn.GetStream());
2 ответа
Все это описано в документации по проекту.
Короче, удалите эту строку SetServiceState , это ненужно / плохо. Выполнять сопряжение каждый раз также необязательно и немного медленно, но, вероятно, не стоит менять, если оно работает хорошо.
- «См. Раздел« Общие подключения данных Bluetooth »ниже. BluetoothClient предоставляет поток для чтения и записи — нет необходимости использовать виртуальные COM-порты»
2) http://32feet.codeplex.com/wikipage?title=General % 20Bluetooth% 20Data% 20Connections
BluetoothAddress addr = BluetoothAddress.Parse("001122334455"); Guid serviceClass; serviceClass = BluetoothService.SerialPort; // - or - etc // serviceClass = MyConsts.MyServiceUuid // var ep = new BluetoothEndPoint(addr, serviceClass); var cli = new BluetoothClient(); cli.Connect(ep); Stream peerStream = cli.GetStream(); peerStream.Write/Read .
- 10049 «Запрошенный адрес недействителен в своем контексте.»
- На удаленном устройстве не работает служба с данным идентификатором класса обслуживания
То есть Неверный идентификатор класса обслуживания.
alanjmcf
15 Мар 2014 в 14:55
device.SetServiceState(serviceClass, true); //do it before pairing . BluetoothClient conn = new BluetoothClient(); conn.Connect(ep);
static Guid serviceClass = new Guid("4d36e978-e325-11ce-bfc1-08002be10318"); //GUID of device class
static Guid serviceClass = new Guid("00001101-0000-1000-8000-00805f9b34fb"); //GUID of bluetooth service
Чтобы увидеть правильный GUID, обратитесь к настройкам / свойствам вашего устройства (не ключа). Вы можете увидеть их из Windows.
Question
Hi, I’m writing a program to connect to a bluetooth device using Winsock. In discovery mode, I can find the device, but when I try to connect() I always get the error 10049 (WSAEADDRNOTAVAIL — Address not available). What is the problem?
WSADATA wsaData; if (WSAStartup(MAKEWORD(2, 0), &wsaData) != 0) return (EXIT_FAILURE); if ((_socket = socket(AF_BT, SOCK_STREAM, BTHPROTO_RFCOMM)) == INVALID_SOCKET) return (EXIT_FAILURE); SOCKADDR_BTH sa; std::memset(&sa, 0, sizeof(sa)); int nSizeInput = sizeof(sa); int result = WSAStringToAddress(_address, AF_BTH, NULL, (LPSOCKADDR)&sa, &nSizeInput); // To validate the address. char addressStr[64] = ; DWORD dwSizeOfStr = sizeof(addressStr); WSAAddressToStringA((LPSOCKADDR)&sa, nSizeInput, NULL, addressStr, &dwSizeOfStr); result = connect(_socket, (SOCKADDR*)&sa, sizeof(sa));
Answers
There’s a sample that covers this in the WM6 SDK:
Windows Mobile 6 SDKSamplesPocketPCCPPwin32BluetoothBthChat Try setting the addressFamily member of SOCKADDR_BTH to AF_BT. Also, try setting the btAddr member to one of the devices returned from WSALookupServiceNext.
http://msdn.microsoft.com/en-us/library/aa916570.aspx -PaulH
I’m developing a dll in visual-c++ for client side application to connect my pc to my android phone via bluetooth. I use this function to find my bluetooth service on the phone(see commented code!):
bool BlueRayXVR::findPairedService(GUID* guid, _SOCKET_ADDRESS* ret)< this->checkStartup(); HBLUETOOTH_DEVICE_FIND found_devices; BLUETOOTH_DEVICE_INFO device_info; device_info.dwSize = sizeof(device_info); BLUETOOTH_DEVICE_SEARCH_PARAMS search_criteria; search_criteria.dwSize = sizeof(BLUETOOTH_DEVICE_SEARCH_PARAMS); search_criteria.fReturnAuthenticated = TRUE; search_criteria.fReturnRemembered = FALSE; search_criteria.fReturnConnected = FALSE; search_criteria.fReturnUnknown = FALSE; search_criteria.fIssueInquiry = FALSE; search_criteria.cTimeoutMultiplier = 0; found_devices = BluetoothFindFirstDevice(&search_criteria, &device_info); if (found_devices == NULL) < _tprintf(TEXT("Error: n%sn"), getErrorMessage(WSAGetLastError(), error)); return false; >WSAQUERYSET querySet; memset(&querySet, 0, sizeof(querySet)); querySet.dwSize = sizeof(querySet); querySet.lpServiceClassId = guid; querySet.dwNameSpace = NS_BTH; SOCKADDR_BTH sab; memset (&sab, 0, sizeof(sab)); sab.addressFamily = AF_BTH; char addressAsString[1000]; DWORD addressSize = sizeof(addressAsString); bool found = false; do < sab.btAddr = device_info.Address.ullLong; if (0 != WSAAddressToString((LPSOCKADDR)&sab, sizeof(sab), NULL, (LPWSTR)addressAsString, &addressSize))< _tprintf(TEXT("Error get the mac of the device %sn.Going to the next device."), device_info.szName); >else< _tprintf(TEXT("Check on device %s%s for the service.n"), device_info.szName, addressAsString); querySet.lpszContext =(LPWSTR) addressAsString; HANDLE service_lookup_handle; DWORD flags = LUP_FLUSHCACHE |LUP_RETURN_NAME | LUP_RETURN_ADDR | LUP_RETURN_BLOB; int result = WSALookupServiceBegin(&querySet, flags, &service_lookup_handle); if (0 == result) < BYTE buffer[2000]; DWORD bufferLength = sizeof(buffer); WSAQUERYSET *pResults = (WSAQUERYSET*)&buffer; if(0 == WSALookupServiceNext(service_lookup_handle, flags, &bufferLength, pResults)) < _tprintf(TEXT("Service : %sn"), pResults->lpszServiceInstanceName); _tprintf(TEXT("Comment : %sn"), pResults->lpszComment); *ret = pResults->lpcsaBuffer->RemoteAddr; found = true; /* this->sock = socket(AF_BTH, SOCK_STREAM, BTHPROTO_RFCOMM); if (0 == ::connect(sock, ret->lpSockaddr, ret->iSockaddrLength)) < printf("connected"); //closesocket (*sock); //return TRUE; >wprintf(L"errore %d: %s", WSAGetLastError(), this->getErrorMessage(WSAGetLastError(), this->error)); */ > result = WSALookupServiceEnd(service_lookup_handle); > else _tprintf(TEXT("%snGoing to the next device..n"), getErrorMessage(GetLastError(), error)); > > while (BluetoothFindNextDevice(found_devices, &device_info) && !found); if(found_devices) BluetoothFindDeviceClose(found_devices); _tprintf(TEXT("No more device.n")); return found; >
And this one to connect to the phone:
bool BlueRayXVR::connect(_SOCKET_ADDRESS* host) < this->sock = socket(AF_BTH, SOCK_STREAM, BTHPROTO_RFCOMM); if (this->sock == INVALID_SOCKET) < _tprintf(TEXT("Failed to get bluetooth socket! %sn"), getErrorMessage(WSAGetLastError(), error)); exit(1); >if (0 == ::connect(sock, host->lpSockaddr, host->iSockaddrLength)) < printf("connectedn"); return TRUE; >wprintf(L"errore %d: %s", WSAGetLastError(), this->getErrorMessage(WSAGetLastError(), this->error)); return FALSE; >
In my test console app i do:
_SOCKET_ADDRESS address; memset (&address, 0, sizeof(address)); if(blue->findPairedService(&blue->getDefaultGUID4XVR(), &address))< printf("service founded..try to connect..n"); if(blue->connect(&address)) blue->read(); >
The problem is that if i run my code i always get error 10049.
the strange thing is that if i uncomment the lines of code in findPairedService function and i just do
_SOCKET_ADDRESS address; memset (&address, 0, sizeof(address)); if(blue->findPairedService(&blue->getDefaultGUID4XVR(), &address))
it succesfully connect to the phone….
Ошибка 10049 при подключении устройства bluetooth с 32 футами
Я пытаюсь установить соединение с настраиваемым устройством Bluetooth без использования COM-портов. Однако я получаю сообщение об ошибке: [10049] «Запрошенный адрес недействителен в своем контексте». Что я делаю неправильно?
static Guid serviceClass= new Guid("4d36e978-e325-11ce-bfc1-08002be10318"); //GUID of device class static BluetoothAddress addr = BluetoothAddress.Parse("001210160177"); //from device BluetoothDeviceInfo device = new BluetoothDeviceInfo(addr); device.SetServiceState(serviceClass, true); Console.WriteLine(BluetoothSecurity.PairRequest(device.DeviceAddress, "0000")); //pairing my device - writes True BluetoothEndPoint ep = new BluetoothEndPoint(addr, serviceClass); BluetoothClient conn = new BluetoothClient(ep); //10049 error conn.Connect(ep); Console.WriteLine(conn.GetStream());
2 ответа
Все это описано в документации по проекту. 🙂
Короче, удалите эту строку SetServiceState , это ненужно / плохо. Выполнять сопряжение каждый раз также необязательно и немного медленно, но, вероятно, не стоит менять, если оно работает хорошо.
- «См. Раздел« Общие подключения данных Bluetooth »ниже. BluetoothClient предоставляет поток для чтения и записи - нет необходимости использовать виртуальные COM-порты»
BluetoothAddress addr = BluetoothAddress.Parse("001122334455"); Guid serviceClass; serviceClass = BluetoothService.SerialPort; // - or - etc // serviceClass = MyConsts.MyServiceUuid // var ep = new BluetoothEndPoint(addr, serviceClass); var cli = new BluetoothClient(); cli.Connect(ep); Stream peerStream = cli.GetStream(); peerStream.Write/Read .
- 10049 «Запрошенный адрес недействителен в своем контексте.»
- На удаленном устройстве не работает служба с данным идентификатором класса обслуживания
То есть Неверный идентификатор класса обслуживания.
device.SetServiceState(serviceClass, true); //do it before pairing . BluetoothClient conn = new BluetoothClient(); conn.Connect(ep);
static Guid serviceClass = new Guid("4d36e978-e325-11ce-bfc1-08002be10318"); //GUID of device class
static Guid serviceClass = new Guid("00001101-0000-1000-8000-00805f9b34fb"); //GUID of bluetooth service
Чтобы увидеть правильный GUID, обратитесь к настройкам / свойствам вашего устройства (не ключа). Вы можете увидеть их из Windows.
Error 10049 while connecting bluetooth device with 32feet
I'm trying to establish a connection with a custom bluetooth device without using COM ports. However, I'm getting an error: [10049] "The requested address is not valid in its context". What am I doing wrong?
static Guid serviceClass= new Guid("4d36e978-e325-11ce-bfc1-08002be10318"); //GUID of device class static BluetoothAddress addr = BluetoothAddress.Parse("001210160177"); //from device BluetoothDeviceInfo device = new BluetoothDeviceInfo(addr); device.SetServiceState(serviceClass, true); Console.WriteLine(BluetoothSecurity.PairRequest(device.DeviceAddress, "0000")); //pairing my device - writes True BluetoothEndPoint ep = new BluetoothEndPoint(addr, serviceClass); BluetoothClient conn = new BluetoothClient(ep); //10049 error conn.Connect(ep); Console.WriteLine(conn.GetStream());
2 Answers 2
Its all covered in the project's documentation. 🙂
In short, remove that SetServiceState line it is unnecessary/bad. Doing the pairing each time is also unnecessary and a bit slow but probably not worth changing if its working well.
- "See section General Bluetooth Data Connections below. The BluetoothClient provides the Stream to read and write on -- there is no need to use virtual COM ports"
BluetoothAddress addr = BluetoothAddress.Parse("001122334455"); Guid serviceClass; serviceClass = BluetoothService.SerialPort; // - or - etc // serviceClass = MyConsts.MyServiceUuid // var ep = new BluetoothEndPoint(addr, serviceClass); var cli = new BluetoothClient(); cli.Connect(ep); Stream peerStream = cli.GetStream(); peerStream.Write/Read .
- 10049 "The requested address is not valid in its context."
- No Service with given Service Class Id is running on the remote device
i.e. Wrong Service Class Id.