蓝牙设备与PC socket通讯

1. 蓝牙适配器插入PC USB口(前提蓝牙适配器驱动要装好)
2. 开启蓝牙key或蓝牙手机等蓝牙设备。

3. 运行一下程序

#include "stdafx.h"

#include <initguid.h>
#include <winsock2.h>
#include <ws2bth.h>

#pragma comment(lib,"ws2_32.lib")
#pragma comment(lib,"irprops.lib")

int SDPGetPort( const char *addr , LPGUID guid )
{
	int nRet = 0;
	int port = 0;
	HANDLE h ;
	WSAQUERYSET *qs ;
	DWORD flags = 0;
	DWORD qs_len ;
	bool done ;
	qs_len = sizeof(WSAQUERYSET ) ;
	qs = (WSAQUERYSET* ) malloc( qs_len ) ;
	ZeroMemory( qs , qs_len ) ;
	qs->dwSize = sizeof(WSAQUERYSET ) ;
	qs->lpServiceClassId = guid ;
	qs->dwNameSpace = NS_BTH ;
	qs->dwNumberOfCsAddrs = 0;
	qs->lpszContext = (LPSTR) addr ;
	flags = LUP_FLUSHCACHE | LUP_RETURN_ADDR;
	nRet = WSALookupServiceBegin ( qs , flags, &h );
	if( SOCKET_ERROR == nRet ) {
		nRet = WSAGetLastError();
		ExitProcess ( 2 ) ;
	}
	done = false ;
	while ( ! done ) {
		if( SOCKET_ERROR == WSALookupServiceNext (h , flags, &qs_len , qs) ) {
			int error = WSAGetLastError ( ) ;
			if( error == WSAEFAULT ) {
				free(qs ) ;
				qs = (WSAQUERYSET* ) malloc( qs_len ) ;
			} else if (error == WSA_E_NO_MORE ) {
				done = true ;
			} else {
				ExitProcess ( 2 ) ;
			}
		} else {
			SOCKADDR_BTH *sa =
				(SOCKADDR_BTH* )qs->lpcsaBuffer->RemoteAddr.lpSockaddr ;
			port = sa->port ;
		}
	}
	free(qs ) ;
	WSALookupServiceEnd( h ) ;
	return port ;
}
int _tmain(int argc , _TCHAR* argv[ ] )
{
	int nRet = 0;
	SOCKET sock ;
	SOCKADDR_BTH sa = { 0 } ;
	int sa_len = sizeof(sa ) ;
	
	WORD wVersionRequested ;
	WSADATA wsaData ;
	wVersionRequested = MAKEWORD( 2, 0 );
	if( WSAStartup( wVersionRequested, &wsaData ) != 0 ) {
		ExitProcess ( 2 ) ;
	}

	if( SOCKET_ERROR == WSAStringToAddress ( _T("00:15:83:5c:60:fe")/*argv[1]*/ , AF_BTH ,
		NULL, (LPSOCKADDR) &sa, &sa_len ) ) {
			nRet = GetLastError();
			ExitProcess ( 2 ) ;
	}
	// query it for the right port
	// create the socket
	sock = socket (AF_BTH , SOCK_STREAM , BTHPROTO_RFCOMM ) ;
	if( SOCKET_ERROR == sock ) {
		ExitProcess ( 2 ) ;
	}
	// fill in the rest of the SOCKADDR_BTH struct
	sa.port = SDPGetPort ("00:15:83:5c:60:fe", (LPGUID)&SerialPortServiceClass_UUID/*(LPGUID) &SAMPLE_UUID*/ ) ;
	if( sa.port == 0 ) {
		ExitProcess ( 2 ) ;
	}
	
	nRet = connect( sock, (LPSOCKADDR) &sa , sa_len );
	if( SOCKET_ERROR == nRet ) {
		nRet = GetLastError();
		ExitProcess ( 2 ) ;
	}
	send ( sock , "hello!" , 5, 0 );
	closesocket (sock ) ;
	return 0;
}
4. 注: 
00:15:83:5c:60:fe 为 蓝牙设备的mac地址为六段。

connet运行时,出现连接设备的窗口,需要点击下一步,这里把mac地址固定,相当于省略了选的哪一步。

《Cambridge - Bluetooth Essentials for Programmers.pdf》 网上可以下载,可以参考。





  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值