转移40个字符后蓝牙插座挂起

时间:2015-07-24 14:04:02

标签: bluetooth rfcomm

我正在尝试在STM32蓝牙设备和连接在beaglebone black上的1类蓝牙适配器之间建立蓝牙通信链接。

设备正在被检测到,配对和一切!。

我们的想法是在STM模块和连接到beaglebone Black的蓝牙适配器之间使用SPP和Exchange数据。

这是我的代码,用于建立通信。

#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 addr = { 0 };
    int s, status;
    char dest[18] = "00:80:E1:B3:28:DE";
    char buf[2048] = { 0 };
    // allocate a socket
    s = socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM);

    // set the connection parameters (who to connect to)
    addr.rc_family = AF_BLUETOOTH;
    addr.rc_channel = (uint8_t) 1;
    str2ba( dest, &addr.rc_bdaddr );

    // connect to server
    status = connect(s, (struct sockaddr *)&addr, sizeof(addr));

   //  send a message
    if( status == 0 ) {
    while(1){


    status = recv(s, buf,1,0);
    if( status  > 0 ) {
        printf("\n\nreceived [%s]\n", buf);
    }

    }
    }

    if( status < 0 ) perror("\n\nuh oh");

    close(s);
    return 0;
}

在传输40个字符(在模块上,而不是主机上)后,recv()不输出任何内容。代码必须停止(Ctrl + C)然后重新启动。

是否有一些缓冲区需要清除或每40个字符后重置一次?

我用HC-05 MOdule尝试了相同的代码,遇到了同样的问题。

任何对rfcomm和套接字代码有所了解的人?

0 个答案:

没有答案