應該采用RFCOMM虛擬串口方式來進行通信,原理跟socket通信類似,不同的是使用的通信協議不同,本人結合相關的API,做了以下最簡單的封裝。
1、獲取本地藍牙設備與附近藍牙設備信息
2、通信類
/*
通信類:只是對于客戶端通信
Initialize
Create
Connect
Send
Receive
Close
Finalize
*/
class? BlueToothSimple
{
public:
?? ?bool Initialize();
?? ?bool Create();
? ? bool Connect(const char* straddr, const char* guid = "0000fd2d-0000-1000-8000-00805f9b34fb");
? ? bool Send(const char* msgToServer);
?? ?// 返回字符串
?? ?string Receive();
?? ?// 返回特殊的數據,針對于\r\n 劃分開的字符串
?? ?vector<CString> ReceiveEx();
? ? bool Close();
? ? void Finalize();
protected:
?? ?int error;
?? ?SOCKET btSocket;
};
3、支持服務器客戶端藍牙虛擬通信接口
class BlueToothSocket
{
public:
?? ?BlueToothSocket();
?? ?~BlueToothSocket();
?? ?BOOL StartSearchBthDev(IN DWORD dwControlFlags);
?? ?BOOL GetNextBthDev(
?? ??? ?IN OUT BTHDEV_INFO *pcBthDevInfo,
?? ??? ?IN DWORD dwControlFlags = LUP_RETURN_NAME | LUP_RETURN_ADDR | LUP_FLUSHCACHE
?? ??? ?);
?? ?BOOL EndSearchBthDev();
?? ?bool Initialize();
?? ?void Finalize();
?? ?BOOL Create(int af = AF_BTH, int type = SOCK_STREAM, int protocol = BTHPROTO_RFCOMM);
?? ?BOOL Close();
?? ?int Bind(BTH_ADDR sktAddr = 0, ULONG port = BT_PORT_ANY);
?? ?int Listen(IN int backlog);
?? ?int GetSockName(BTH_ADDR *psktAddr, ULONG *port);
?? ?int SetBthService(TCHAR *lpServiceName);
?? ?int Accept(BlueToothSocket *pcBth);
?? ?int GetBTHAddr(const char* straddr, BTH_ADDR* btaddr);
?? ?int Connect(BTH_ADDR sktAddr, ULONG port, int nMSecond = -1);
?? ?int Send(LPVOID lpData, int len, int flags = 0);
?? ?int Recv(LPVOID lpData, int len, int flags = 0);
?? ?int SendAll(LPVOID lpData, int len, int flags = 0);
?? ?int RecvAll(LPVOID lpData, int len, int flags = 0);
private:
?? ?void HexMac2String(BTH_ADDR dw64Addr, TCHAR *pstrMac);
};
資源下載地址:https://download.csdn.net/download/u011269801/89296309?spm=1001.2014.3001.5503