Android 在覆盆子pi3上使用C(BlueZ)的蓝牙技术赢得';不要给安卓写信。读书很好
我研究了一下,通过在这个网站上查找信息,我认为我已经找到了答案,但我仍然无法用C语言从pi发送到我的Android。我能够从Android fine接收信息。Android客户端软件似乎很好,因为我可以通过以下方式进行双向通信: “sdptool添加SP”然后是“sudo rfcomm watch hci0” 然后我使用Android 在覆盆子pi3上使用C(BlueZ)的蓝牙技术赢得';不要给安卓写信。读书很好,android,c,bluetooth,bluez,raspberry-pi3,Android,C,Bluetooth,Bluez,Raspberry Pi3,我研究了一下,通过在这个网站上查找信息,我认为我已经找到了答案,但我仍然无法用C语言从pi发送到我的Android。我能够从Android fine接收信息。Android客户端软件似乎很好,因为我可以通过以下方式进行双向通信: “sdptool添加SP”然后是“sudo rfcomm watch hci0” 然后我使用/dev/rfcomm0设备使用了minicom-D 在执行此应用程序之前,我会运行“sdptool add SP”。在这之后,我可以连接我的Android。我没有得到任何错误。
/dev/rfcomm0
设备使用了minicom-D
在执行此应用程序之前,我会运行“sdptool add SP”。在这之后,我可以连接我的Android。我没有得到任何错误。我的Android屏幕上什么也看不到
我错过了什么?我想一旦我打开了套接字,连接成功,我就可以从中读写了
以下是我在pi上的代码:
#include <stdio.h>
#include <unistd.h>
#include <sys/socket.h>
#include <bluetooth/bluetooth.h>
#include <bluetooth/rfcomm.h>
int main(int argc, char **argv)
{
struct sockaddr_rc loc_addr = { 0 }, rem_addr = { 0 };
char buf[1024] = { 0 };
int s, client, bytes_read, status;
socklen_t opt = sizeof(rem_addr);
status = 0;
// allocate socket
s = socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM);
// bind socket to port 1 of the first available
// local bluetooth adapter
loc_addr.rc_family = AF_BLUETOOTH;
loc_addr.rc_bdaddr = *BDADDR_ANY;
loc_addr.rc_channel = (uint8_t) 1;
bind(s, (struct sockaddr *)&loc_addr, sizeof(loc_addr));
// put socket into listening mode
listen(s, 1);
printf("Put into listening mode\n");
// accept one connection
client = accept(s, (struct sockaddr *)&rem_addr, &opt);
ba2str(&rem_addr.rc_bdaddr, buf);
fprintf(stderr, "accepted connection from %s\n", buf);
//write some bytes
if (status == 0)
status = write(client,"Hello World",11);
if (status < 0) printf("Something is broken\n");
// read data from the client
memset(buf, 0, sizeof(buf));
bytes_read = read(client, buf, sizeof(buf));
if( bytes_read > 0 )
printf("received\n [%s]\n", buf);
// close connection
close(client);
close(s);
return 0;
}
#包括
#包括
#包括
#包括
#包括
int main(int argc,字符**argv)
{
结构sockaddr_rc loc_addr={0},rem_addr={0};
char buf[1024]={0};
int s,客户端,字节读取,状态;
socklen_t opt=sizeof(rem_addr);
状态=0;
//分配套接字
s=插座(AF_蓝牙、SOCK_流、BTPROTO_RFCOMM);
//将套接字绑定到第一个可用端口的端口1
//本地蓝牙适配器
loc_addr.rc_family=AF_蓝牙;
loc_addr.rc_bdaddr=*bdaddr_ANY;
loc_addr.rc_channel=(uint8_t)1;
绑定(结构sockaddr*)和loc_addr,大小(loc_addr));
//将套接字置于侦听模式
听(s,1);
printf(“进入侦听模式\n”);
//接受一个连接
client=accept(s,(struct sockaddr*)和rem_addr,&opt);
ba2str(和rem_addr.rc_bdaddr,buf);
fprintf(stderr,“已接受来自%s的连接”,buf);
//写一些字节
如果(状态==0)
状态=写入(客户端,“Hello World”,11);
如果(状态<0)printf(“某物已损坏”\n);
//从客户端读取数据
memset(buf,0,sizeof(buf));
bytes_read=read(客户机、buf、sizeof(buf));
如果(字节读取>0)
printf(“已接收\n[%s]\n”,buf);
//密切联系
关闭(客户);
关闭(s);;
返回0;
}
我已经为此工作了好几天了。我一问这个问题,就明白了。两件事: