android - 在 Raspberry pi3 上使用 C (BlueZ) 的蓝牙不会写入 Android。读书没问题

标签 android c bluetooth bluez raspberry-pi3

我进行了研究,并通过在此站点上查找信息,认为我已经弄明白了,但我仍然无法从 pi 发送到我的 C Android 中。我可以从 Android 中正常接收。 Android 客户端软件似乎没问题,因为我可以使用以下方式进行双向通信:

'sdptool add SP' 然后'sudo rfcomm watch hci0'

然后我使用 minicom -D 使用 /dev/rfcomm0 设备。

在执行此应用程序之前,我确实运行了“sdptool add SP”。之后我就可以连接我的安卓了。我没有收到任何错误。我的 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;
}

最佳答案

我已经为此工作了好几天。我一问这个问题,我就明白了。两件事:

  1. 确保您的终端程序在吐出数据之前没有查找/n/r,或者您应该确保在测试时发送/n/r!

  2. 'int status' 保存从最后一个写命令发送的字符数。如果你尝试循环(我做了测试,虽然没有在我的代码中显示)并且只写 while status==0,它只会发送第一次。如果您设置缓冲区限制,则可能无法达到。

两者的结合让我看起来好像什么都没收到。

关于android - 在 Raspberry pi3 上使用 C (BlueZ) 的蓝牙不会写入 Android。读书没问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39049912/

相关文章:

android - 在Ruboto中访问/res/drawable文件夹

android - 如何使用 Firebase 列表适配器

android - 当默认设置为 0 时,SharedPreferences getInt 返回 -1

java - 在android中使用onScanResult获取两个BLE设备

c++ - 如何以编程方式修改 Open/Libreoffice odt 文档?

c++ - 压缩嵌套循环

c++ - memset 和 _strnset 之间的区别

android - 蓝牙 -> 服务发现失败

android - 信标如何在没有任何应用程序的情况下在设备上发送通知?

android - AIR <-> 安卓通信