蓝牙的基本功能无非就是配对(后面会阐述),基于OPUSH协议的传输文件(后面会讲),向蓝牙播放音频(以后会讲),基于rfcomm的通信,拨号上网,ftp等。通过对bluez的深入学习,已基本上实现了在linux系统下的基本功能,后面还会介绍如何修改蓝牙的配置信息等技术。
这节就简单介绍下基于rfcomm的通信编程的客户端的实现。其实就是socket编程,与我们不同的是IP变成了MAC,端口号变成了Channel。
在编译的时候记得指定bluez的includes和lbluetooth哦。
配对成功后才能成功!!!!!!!!!!!!!!!!!
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <unistd.h>
4 #include <sys/socket.h>
5 #include <bluetooth/bluetooth.h>
6 #include <bluetooth/rfcomm.h>
7
8 int main(int argc,char **argv)
9 {
10 struct sockaddr_rc addr={0};
11 int s,status;
12 char *dest,*buf;
13
14 if(argc==2)
15 {
16 dest=argv[1];
17 }
18 else
19 {
20 printf("Pram error\n");
21 exit(1);
22 }
23
24 printf("Creat socket!\n");
25 s=socket(PF_BLUETOOTH,SOCK_STREAM,BTPROTO_RFCOMM);
26 if(s<0)
27 {
28 printf("creat socket error!!\n");
29 exit(1);
30 }
31
32 buf=(char*)malloc(sizeof(char)*128);
33 addr.rc_family = AF_BLUETOOTH;
34 addr.rc_channel = (uint8_t)1;
35 str2ba(dest,&addr.rc_bdaddr);
36
37 printf("connectting...\n");
38 status=connect(s,(struct sockaddr *)&addr,sizeof(addr));
39 if(status==0)
40 {
41 printf("scuess!\n");
42 status=write(s,"hello!",6);
43 printf("If you want to exit,please input : goodbye\n");
44 printf("Please input:)\n");
45 do{
46 scanf("%s",buf);
47 status=write(s,buf,strlen(buf));
48 if(status<0) perror("uh oh");
49 printf("Please input:)\n");
50 }while(strcmp(buf,"goodbye")!=0);
51 printf("You have exit!\n");
52 }
53 else
54 {
55 printf("Connect Failed!\n");
56 }
57 free(buf);
58 close(s);
59 return 0;
60
61 }