bluetooth开发(二)------基于rfcomm通信编程之服务器端
2014-04-10 09:03
309 查看
蓝牙的基本功能无非就是配对(后面会阐述),基于OPUSH协议的传输文件(后面会讲),向蓝牙播放音频(以后会讲),基于rfcomm的通信,拨号上网,ftp等。通过对bluez的深入学习,已基本上实现了在linux系统下的基本功能,后面还会介绍如何修改蓝牙的配置信息等技术。
这节就简单介绍下基于rfcomm的通信编程的服务器端的实现。其实就是socket编程,与我们不同的是IP变成了MAC,端口号变成了Channel。
在编译的时候记得指定bluez的includes和lbluetooth哦。
配对成功后才能使用!!!!!!!!!!!!!!!!!!
这节就简单介绍下基于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 loc_addr ={0},rem_addr={0}; 11 char buf[1024] ={0};//,*addr; 12 int s,client, bytes_read,result; 13 int opt = sizeof(rem_addr); 14 /*Fir--creat socket */ 15 printf("Creating socket...\n"); 16 s =socket(PF_BLUETOOTH,SOCK_STREAM,BTPROTO_RFCOMM); 17 if(s<0) 18 { 19 perror("create socket error"); 20 exit(1); 21 } 22 else 23 { 24 printf("success!\n"); 25 } 26 27 28 loc_addr.rc_family=AF_BLUETOOTH; 29 loc_addr.rc_bdaddr=*BDADDR_ANY; 30 loc_addr.rc_channel=(uint8_t)1; 31 32 /*bind socket*/ 33 printf("zkwang******Binding socket...\n"); 34 result=bind(s,(struct sockaddr *)&loc_addr, sizeof(loc_addr)); 35 if(result<0) 36 { 37 perror("bind socket error:"); 38 exit(1); 39 } 40 else 41 { 42 printf("zkwang******success!\n"); 43 44 } 45 46 /*Listen*/ 47 printf("Listen... \n"); 48 result=listen(s,5); 49 if(result<0) 50 { 51 printf("error:%d\n:",result); 52 perror("listen error:"); 53 exit(1); 54 } 55 else 56 { 57 printf("requested!\n"); 58 } 59 60 /*Accept*/ 61 printf("Accepting...\n"); 62 client= accept(s,(struct sockaddr *)&rem_addr,&opt); 63 if(client<0) 64 { 65 perror("accept error\n"); 66 exit(1); 67 } 68 else 69 { 70 printf("OK!\n"); 71 } 72 73 ba2str(&rem_addr.rc_bdaddr,buf); 74 75 printf("accepted connection from %s \n",buf); 76 memset(buf,0,sizeof(buf)); 77 78 while(1) 79 { 80 bytes_read = read(client,buf,sizeof(buf)); 81 if(bytes_read>0){ 82 printf("Received:%s\n",buf); 83 if(strcmp(buf,"goodbye")==0) 84 { 85 printf("Client is down!!"); 86 exit(1); 87 } 88 memset(buf,0,bytes_read); 89 } 90 } 91 close(client); 92 close(s); 93 return 0 ; 94 }
相关文章推荐
- bluetooth开发(三)------基于rfcomm通信编程之客户端
- C#基于TCP协议的服务器端和客户端通信编程的基础教程
- 实战IM(即时通讯系统)开发——剖析.NET网络通信、音频、移动平台IM及服务器端编程
- 关于Python基于TCP的服务器端和客户端编程
- Socket编程——基于TCP实现自己的通信协议
- Android上的蓝牙通信功能的开发:BluetoothChat例程分析
- Android开发之基于MINA框架的聊天通信功能实现
- TCP/IP网络编程 基于Linux编程_4 --多线程服务器端的实现
- 大并发服务器开发之基于对像的编程风格
- 通过VC编程实现基于LAN的PC机与Tektronix示波器通信
- Linux下基于UDP协议的C/S通信编程笔记
- 面向对象编程、面向服务架构、基于组件开发三种编程模式的区别和适用领域
- 基于TCP的服务器端/客户端(一)---------网络编程(linux----C)
- 基于udp的socket编程小例子之使用多线程进行通信
- java服务器开发:基于mina的网络通信模块
- 与众不同 windows phone (30) - Communication(通信)之基于 Socket TCP 开发一个多人聊天室
- 与众不同 windows phone (31) - Communication(通信)之基于 Socket UDP 开发一个多人聊天室
- 基于API函数的串口通信编程——理解(转)
- 软件开发方法--.NET基于接口的编程 Interface first programming
- 基于visual c++之windows核心编程代码分析(16)使用邮槽进行进程通信