[ad_1]
你好 ,
我需要通过蓝牙将图片从桌面 (Windows XP) 上的应用程序发送到手机。 知道该怎么做吗? 您能给我一些从哪里开始的指示和参考吗? 可以使用 Windows 蓝牙 SDK 来实现吗?
任何帮助表示赞赏。
谢谢。
更新:
好的。 我找到了这个 http://support.microsoft.com/kb/883259#81[^] 。 在页面的末尾,有一个发送/接收文件选项。 我想以编程方式进行坑。 有任何以编程方式执行此操作的指南吗?
解决方案3
蓝牙 API – 是个好主意
您可以使用后续步骤:
1. 使用 WSALookupServiceBegin、WSALookupServiceNext 函数枚举可用的电话服务
2.获取OBEX文件传输服务地址
3.创建蓝牙套接字
4.连接到找到的服务地址
5. 实现 OBEX 文件传输协议(Connect 和 Put 命令 – http://netwinder.osuosl.org/pub/netwinder/docs/nw/irda/IrOBEX12.pdf[^], http://dotcom.bluetoothsig.org/SiteCollectionDocuments/GOEP_SPEC_V12.pdf[^])并通过套接字发送文件
我可以分享自己的测试项目,但不知道如何将其附加到解决方案
解决方案4
C++
<pre>///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // // MSDN Bluetooth and Connect // See: https://msdn.microsoft.com/en-us/library/windows/desktop/aa362901(v=vs.85).aspx // // MSDN Send Function // See: https://msdn.microsoft.com/en-us/library/windows/desktop/ms740149(v=vs.85).aspx // // MSDN Bluetooth and read or write operations: // See: https://msdn.microsoft.com/en-us/library/windows/desktop/aa362907(v=vs.85).aspx // // Error Codes: // See: https://msdn.microsoft.com/en-us/library/windows/desktop/ms740668(v=vs.85).aspx // #include "zss.cmnlib.h" #include <stdlib.h> #include <stdio.h> #include <iostream> // #include <afxwin.h> #include <WinSock2.h> #include <bthsdpdef.h> #include <bluetoothapis.h> #include <ws2bth.h> // #include "Zss.Zsslog.h" // Preprocessor Directive: Pragma's: // Need to link with Ws2_32.lib #pragma comment(lib, "ws2_32.lib") // define Directive's: #define DEFAULT_BUFLEN 512 DEFINE_GUID(GUID_NULL, "00000000-0000-0000-0000-000000000000"); int __cdecl main(int argc, char **argv) { std::cout << "******************************************************\r\n"; //-------------------------------------------- // Locals: //-------------------------------------------- int result = 0; ULONG iResult = 0; //-------------------------------------------- // Prep the Buffer's: //-------------------------------------------- int recvbuflen = DEFAULT_BUFLEN; char recvbuf[DEFAULT_BUFLEN] = ""; // char *sendbuf = "AT+COPS?\r"; char *sendbuf = "AT+BTVER?\r"; int len = (int)strlen(sendbuf); //-------------------------------------------- // Initialise WinSock. //-------------------------------------------- WSADATA WSAData = { 0 }; WORD wVersionRequested = MAKEWORD(2, 2); if ((iResult = WSAStartup(wVersionRequested, &WSAData)) != 0) { } std::cout << "WINSOCK: 'WSAData' Return Code: " << WSAGetLastError() << "\r\n"; //-------------------------------------------- // The WinSock Socket. //-------------------------------------------- SOCKET LocalSocket = INVALID_SOCKET; //-------------------------------------------- // Local End Point SOCKADDR_BTH. //-------------------------------------------- SOCKADDR_BTH LocalEndpoint; // number of service channel, 0 or BT_PORT_ANY; LocalEndpoint.port = 0; LocalEndpoint.addressFamily = AF_BTH; LocalEndpoint.btAddr = 0; LocalEndpoint.serviceClassId = GUID_NULL; std::cout << " Local EndPoint Address: " << LocalEndpoint.btAddr << "\r\n"; //-------------------------------------------- // Remote End Point SOCKADDR_BTH. //-------------------------------------------- SOCKADDR_BTH RemoteEndPoint; // number of service channel, 0 or BT_PORT_ANY; RemoteEndPoint.port = 0; RemoteEndPoint.addressFamily = AF_BTH; // bt address of my smartphone ; RemoteEndPoint.btAddr = BTH_ADDR(0xD428D57436B0); // RemoteEndPoint.serviceClassId = SerialPortServiceClass_UUID; // COM Protocol // RemoteEndPoint.serviceClassId = OBEXFileTransferServiceClass_UUID; // error, connect return 10049 //RemoteEndPoint.serviceClassId = HandsfreeServiceClass_UUID; // RFCOMM_PROTOCOL_UUID RemoteEndPoint.serviceClassId = OBEXObjectPushServiceClass_UUID; int BTHAddrLength = sizeof(RemoteEndPoint); std::cout << " Remote EndPoint Address: " << RemoteEndPoint.btAddr << "\r\n"; //-------------------------------------------- // Create the socket. //-------------------------------------------- if ((LocalSocket = socket(AF_BTH, SOCK_STREAM, BTHPROTO_RFCOMM)) == INVALID_SOCKET) { } std::cout << "WINSOCK: 'socket' Return Code: " << WSAGetLastError() << "\r\n"; //-------------------------------------------- // Bind the socket. //-------------------------------------------- if ((iResult = bind(LocalSocket, (SOCKADDR *)&LocalEndpoint, sizeof(LocalEndpoint))) == SOCKET_ERROR) { } std::cout << "WINSOCK: 'bind' Return Code: " << WSAGetLastError() << "\r\n"; //-------------------------------------------- // Connect the socket. //-------------------------------------------- if ((iResult = connect(LocalSocket, (SOCKADDR *)&RemoteEndPoint, sizeof(RemoteEndPoint))) == INVALID_SOCKET) { } std::cout << "WINSOCK: 'connect' Return Code: " << WSAGetLastError() << "\r\n"; //-------------------------------------------- // Send the Buffer. //-------------------------------------------- // if ((iResult = send(LocalSocket, sendbuf, len, MSG_OOB)) == SOCKET_ERROR) char *strPath = "D:/bt.txt"; const char package[] = /* Connect | 2B of length| OBEX Ver 1.0| Flag| Max Size */ {0x80, 0x00, 0x07, 0x10, 0x00, 2048>>8, 2048&0xFF}; if ((iResult = send(LocalSocket, package, sizeof(package)/sizeof(char), 0)) == SOCKET_ERROR) { } std::cout << "WINSOCK: 'send' Return Code: " << WSAGetLastError() << "\r\n"; //-------------------------------------------- // Receive until the peer termination. //-------------------------------------------- if ((iResult = recv(LocalSocket, recvbuf, recvbuflen, 0)) == SOCKET_ERROR){ std::cout << "WINSOCK: 'recv' Return Code: " << WSAGetLastError() << "\r\n"; return -1; } CString strdata = Byte2Ascn((BYTE*)recvbuf, iResult, 16); std::wcout << "recv data: " << (LPCTSTR) strdata << std::endl; if(0xA0 == static_cast<unsigned char>(recvbuf[0])){ const char* str = "82002bc30000000f01001100620074002e007400780074000049001268656c6c6f2c20776f726c64200d0a"; /* Put | 2B len| HI len | Name| b t . t x t |HI end|h e l l o , w o r l d \r\n */ int dstlen = strlen((const char*)str)/2; BYTE* strdst = (BYTE*)malloc(dstlen * sizeof(BYTE)); Asc2Byten((void*)str, strdst, dstlen); const char package[] = { 0x85,0x00,0x08,0x02,0x00,0x01,0x00,0x03 // 0x82,0x01,0x65,0x01,0x00,0x0F,0x00,0x31,0x00,0x2E,0x00,0x6D,0x00,0x69,0x00,0x64, // 0x00,0x00,0xC3,0x00,0x00,0x01,0x39,0x44,0x00,0x12,0x32,0x30,0x30,0x35,0x30,0x32, // 0x31,0x34,0x54,0x31,0x39,0x34,0x39,0x33,0x38,0x49,0x01,0x3C,0x4D,0x54,0x68,0x64 }; if ((iResult = send(LocalSocket, (const char*)strdst, dstlen, 0)) == SOCKET_ERROR) { } std::cout << "WINSOCK: 'send' Return Code: " << WSAGetLastError() << "\r\n"; delete strdst; if ((iResult = recv(LocalSocket, recvbuf, recvbuflen, 0)) == SOCKET_ERROR){ std::cout << "WINSOCK: 'recv' Return Code: " << WSAGetLastError() << "\r\n"; return -1; } strdata = Byte2Ascn((BYTE*)recvbuf, iResult, 16); std::wcout << "recv data: " << (LPCTSTR) strdata << std::endl; } //-------------------------------------------- // Shutdown the connection. //-------------------------------------------- if ((iResult = shutdown(LocalSocket, SD_SEND)) == SOCKET_ERROR) { } std::cout << "WINSOCK: 'shutdown' Return Code: " << WSAGetLastError() << "\r\n"; //-------------------------------------------- // Close the Socket. //-------------------------------------------- if ((iResult = closesocket(LocalSocket)) == SOCKET_ERROR) { } std::cout << "WINSOCK: 'closesocket' Return Code: " << WSAGetLastError() << "\r\n"; WSACleanup(); std::cout << "END: " << "Application has completed!" << "\r\n"; std::getchar(); return 0; }
[ad_2]
コメント