蓝牙的基本功能无非就是配对(后面会阐述),基于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 }