• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - L2CAP IOS + Linux (Bluez)

[复制链接]
菜鸟教程小白 发表于 2022-12-13 05:23:59 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在尝试在 IOS 和 Linux PC 之间进行简单的 L2CAP Socket 通信。

我已经能够:

在那个 IOS 示例中,他们使用一些 PSM 广告来为 L2CAP channel 选择正确的 PSM。在集成上,我在两边都设置了一个固定的 PSM。 Iphone 正在连接到 Linux 机器固定 PSM。我已经尝试了多个 PSM (0x1001, 0x25)。

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

我的问题是,我是否需要在 Linux 应用程序上实现动态/广告 PSM?我需要选择特定的 PSM 吗?你能完成这项工作吗?你有什么建议吗?

提前致谢!

服务器代码:

#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)。



Best Answer-推荐答案


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

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

关于ios - L2CAP IOS + Linux (Bluez),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55608145/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap