当前位置:   article > 正文

bluetooth开发(二)------基于rfcomm通信编程之服务器端_bluetooth rfcomm

bluetooth rfcomm

               蓝牙的基本功能无非就是配对(后面会阐述),基于OPUSH协议的传输文件(后面会讲),向蓝牙播放音频(以后会讲),基于rfcomm的通信,拨号上网,ftp等。通过对bluez的深入学习,已基本上实现了在linux系统下的基本功能,后面还会介绍如何修改蓝牙的配置信息等技术。

这节就简单介绍下基于rfcomm的通信编程的服务器端的实现。其实就是socket编程,与我们不同的是IP变成了MAC,端口号变成了Channel。

                在编译的时候记得指定bluez的includes和lbluetooth哦。

配对成功后才能使用!!!!!!!!!!!!!!!!!!

  1. 1 #include <stdio.h>
  2. 2 #include <stdlib.h>
  3. 3 #include <unistd.h>
  4. 4 #include <sys/socket.h>
  5. 5 #include <bluetooth/bluetooth.h>
  6. 6 #include <bluetooth/rfcomm.h>
  7. 7
  8. 8 int main (int argc,char **argv)
  9. 9 {
  10. 10 struct sockaddr_rc loc_addr ={0},rem_addr={0};
  11. 11 char buf[1024] ={0};//,*addr;
  12. 12 int s,client, bytes_read,result;
  13. 13 int opt = sizeof(rem_addr);
  14. 14 /*Fir--creat socket */
  15. 15 printf("Creating socket...\n");
  16. 16 s =socket(PF_BLUETOOTH,SOCK_STREAM,BTPROTO_RFCOMM);
  17. 17 if(s<0)
  18. 18 {
  19. 19 perror("create socket error");
  20. 20 exit(1);
  21. 21 }
  22. 22 else
  23. 23 {
  24. 24 printf("success!\n");
  25. 25 }
  26. 26
  27. 27
  28. 28 loc_addr.rc_family=AF_BLUETOOTH;
  29. 29 loc_addr.rc_bdaddr=*BDADDR_ANY;
  30. 30 loc_addr.rc_channel=(uint8_t)1;
  31. 31
  32. 32 /*bind socket*/
  33. 33 printf("zkwang******Binding socket...\n");
  34. 34 result=bind(s,(struct sockaddr *)&loc_addr, sizeof(loc_addr));
  35. 35 if(result<0)
  36. 36 {
  37. 37 perror("bind socket error:");
  38. 38 exit(1);
  39. 39 }
  40. 40 else
  41. 41 {
  42. 42 printf("zkwang******success!\n");
  43. 43
  44. 44 }
  45. 45
  46. 46 /*Listen*/
  47. 47 printf("Listen... \n");
  48. 48 result=listen(s,5);
  49. 49 if(result<0)
  50. 50 {
  51. 51 printf("error:%d\n:",result);
  52. 52 perror("listen error:");
  53. 53 exit(1);
  54. 54 }
  55. 55 else
  56. 56 {
  57. 57 printf("requested!\n");
  58. 58 }
  59. 59
  60. 60 /*Accept*/
  61. 61 printf("Accepting...\n");
  62. 62 client= accept(s,(struct sockaddr *)&rem_addr,&opt);
  63. 63 if(client<0)
  64. 64 {
  65. 65 perror("accept error\n");
  66. 66 exit(1);
  67. 67 }
  68. 68 else
  69. 69 {
  70. 70 printf("OK!\n");
  71. 71 }
  72. 72
  73. 73 ba2str(&rem_addr.rc_bdaddr,buf);
  74. 74
  75. 75 printf("accepted connection from %s \n",buf);
  76. 76 memset(buf,0,sizeof(buf));
  77. 77
  78. 78 while(1)
  79. 79 {
  80. 80 bytes_read = read(client,buf,sizeof(buf));
  81. 81 if(bytes_read>0){
  82. 82 printf("Received:%s\n",buf);
  83. 83 if(strcmp(buf,"goodbye")==0)
  84. 84 {
  85. 85 printf("Client is down!!");
  86. 86 exit(1);
  87. 87 }
  88. 88 memset(buf,0,bytes_read);
  89. 89 }
  90. 90 }
  91. 91 close(client);
  92. 92 close(s);
  93. 93 return 0 ;
  94. 94 }


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/192503
推荐阅读
相关标签
  

闽ICP备14008679号