首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >L2CAP IOS + Linux (蓝光)

L2CAP IOS + Linux (蓝光)
EN

Stack Overflow用户
提问于 2019-04-10 08:35:12
回答 1查看 1.7K关注 0票数 2

我试图在IOS和Linux之间建立一个简单的L2CAP套接字通信。

我已经能够:

在IOS示例中,他们使用一些PSM广告,以便为L2CAP频道选择正确的PSM。在集成方面,我在双方都设置了一个固定的PSM。Iphone正在连接到Linux机器上固定的PSM。我尝试过多个PSM (0x1001,0x25)。

问题是,我无法连接,也无法获得任何关于在广播中发生的事情的信息。

我的问题是,我是否需要在Linux应用程序上实现动态/广告PSM?我需要选择一个特定的PSM吗?你能成功吗?你有什么意见建议?

提前感谢!

服务器代码:

代码语言:javascript
复制
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <bluetooth/bluetooth.h>
#include <bluetooth/l2cap.h>
#include "l2cap_socket.h"

int main(int argc, char **argv)
{
    struct sockaddr_l2 loc_addr = { 0 }, rem_addr = { 0 };
    char buf[1024] = { 0 };
    int server_socket, client_socket, bytes_read;
    unsigned int opt = sizeof(rem_addr);

    printf("Start Bluetooth L2CAP server...\n");

    /* allocate socket */
    server_socket = socket(AF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP);

    /* bind socket to the local bluetooth adapter */
    loc_addr.l2_family = AF_BLUETOOTH;                      /* Addressing family, always AF_BLUETOOTH */
    bacpy(&loc_addr.l2_bdaddr, BDADDR_ANY);                 /* Bluetooth address of local bluetooth adapter */
    loc_addr.l2_psm = htobs(L2CAP_SERVER_PORT_NUM);         /* port number of local bluetooth adapter */

    printf("binding\n");
    if(bind(server_socket, (struct sockaddr *)&loc_addr, sizeof(loc_addr)) < 0) {
        perror("failed to bind");
        exit(1);
    }

    printf("listening\n");
    /* put socket into listening mode */
    listen(server_socket, 1);

    /* accept one connection */
    client_socket = accept(server_socket, (struct sockaddr *)&rem_addr, &opt);  /* return new socket for connection with a client */

    ba2str( &rem_addr.l2_bdaddr, buf );
    printf("connected from %s\n", buf);

    /* read data from the client */
    memset(buf, 0, sizeof(buf));
    bytes_read = recv(client_socket, buf, sizeof(buf), 0);
    if( bytes_read > 0 ) {
        printf("received [%s]\n", buf);
    }

    /* close connection */
    close(client_socket);
    close(server_socket);
    return 0;
}

客户端基于(来自https://github.com/bluekitchen/CBL2CAPChannel-Demo)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-16 05:28:49

我现在有了一个基于https://github.com/bluekitchen/btstack的工作版本

在iOS端,我一直在服务器端使用https://github.com/bluekitchen/CBL2CAPChannel-Demo ( 服务器 )。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55608145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档