OpenHarmony dsoftbus开发者指南:从设备发现到数据传输全流程解析

发布时间:2026/7/2 21:05:58
OpenHarmony dsoftbus开发者指南:从设备发现到数据传输全流程解析 OpenHarmony dsoftbus开发者指南从设备发现到数据传输全流程解析【免费下载链接】dsoftbus_standardOpenHarmony dsoftbus项目地址: https://gitcode.com/openeuler/dsoftbus_standard前往项目官网免费下载https://ar.openeuler.org/ar/OpenHarmony dsoftbus是一套功能强大的分布式通信框架它能够统一管理近场设备间的分布式通信为开发者提供设备发现、连接、组网和数据传输等核心能力。无论底层采用Wi-Fi还是蓝牙等通信方式开发者都可以通过dsoftbus提供的API轻松实现设备间的快速通信而无需关注复杂的通信细节。一、dsoftbus核心功能与架构解析 dsoftbus主要提供三大核心能力多通信模式下的设备发现与连接如WLAN和蓝牙、统一的设备组网与拓扑管理以及用于消息和字节传输的通道建立。这些能力使得开发者可以轻松部署和运行跨平台服务。dsoftbus的整体架构清晰明了主要包含以下几个关键部分从架构图中可以看到dsoftbus位于应用层与硬件层之间向上为应用提供场景化能力集向下通过WLAN和Bluetooth等模块与内核进行软硬件协同。其核心部分包括组网拓扑管理、传输、发现和连接等模块这些模块共同构成了dsoftbus的核心功能。二、开发环境准备与项目结构 ️2.1 环境准备在开始使用dsoftbus进行开发之前需要确保满足以下约束条件要建立连接的设备必须在同一局域网内。在两台设备之间建立连接之前必须先绑定设备。有关绑定过程的详细信息请参见安全子系统自述文件中的相关说明。2.2 项目结构dsoftbus的主要代码目录结构如下/foundation/communication/dsoftbus ├── interfaces # APIs ├── adapter # Adapter code ├── core # Core code │ ├── common # Common code │ ├── authentication # Authentication code │ ├── bus_center # Networking code │ ├── connection # Connection code │ ├── discovery # Discovery code │ ├── transmission # Transmission code │ └── frame # Framework code ├── sdk # Service process code │ ├── bus_center # Networking code │ ├── discovery # Discovery code │ ├── transmission # Transmission code │ └── frame # Framework code └── components # Dependent component code其中核心代码部分core包含了dsoftbus的主要功能实现如设备发现、连接管理、数据传输等。接口部分interfaces提供了供应用层调用的API。三、设备发现轻松找到附近设备 设备发现是分布式通信的第一步dsoftbus提供了便捷的服务发布和设备发现接口。3.1 服务发布流程发布应用的服务// 服务发布回调 typedef struct { void (*OnPublishSuccess)(int publishId); // 服务发布成功时调用 void (*OnPublishFail)(int publishId, PublishFailReason reason); // 服务发布失败时调用 } IPublishCallback; // 发布服务 int PublishService(const char *pkgName, const PublishInfo *info, const IPublishCallback *cb);取消发布应用的服务// 取消发布服务 int UnPublishService(const char *pkgName, int publishId);3.2 设备发现流程发现指定设备// 设备发现回调 typedef struct { void (*OnDeviceFound)(const DeviceInfo *device); // 发现设备时调用 void (*OnDiscoverFailed)(int subscribeId, DiscoveryFailReason failReason); // 发现启动失败时调用 void (*OnDiscoverySuccess)(int subscribeId); // 发现启动成功时调用 } IDiscoveryCallback; // 开始设备发现 int StartDiscovery(const char *pkgName, const SubscribeInfo *info, const IDiscoveryCallback *cb);一旦发现设备dsoftbus会通过回调通知设备信息。根据需要停止发现// 停止发现 int StopDiscovery(const char *pkgName, int subscribeId);注意设备可以主动发现智能手机前提是智能手机已启用“对所有附近设备可见”功能此功能可在设置 超级设备 可见性 所有附近设备中找到。四、设备组网构建稳定的设备网络 设备组网是实现分布式通信的基础dsoftbus提供了简单易用的组网接口。4.1 建立连接使用目标设备的地址和连接回调发起连接请求// 要连接的地址 typedef struct { ConnectionAddrType type; union { struct BrAddr { char brMac[BT_MAC_LEN]; } br; struct BleAddr { char bleMac[BT_MAC_LEN]; uint8_t udidHash[UDID_HASH_LEN]; } ble; struct IpAddr { char ip[IP_STR_MAX_LEN]; uint16_t port; } ip; } info; char peerUid[MAX_ACCOUNT_HASH_LEN]; } ConnectionAddr; // 地址类型 typedef enum { CONNECTION_ADDR_WLAN 0, CONNECTION_ADDR_BR, CONNECTION_ADDR_BLE, CONNECTION_ADDR_ETH, CONNECTION_ADDR_MAX } ConnectionAddrType; // 连接结果回调 typedef void (*OnJoinLNNResult)(ConnectionAddr *addr, const char *networkId, int32_t retCode); // 发起连接请求 int32_t JoinLNN(const char *pkgName, ConnectionAddr *target, OnJoinLNNResult cb);等待连接结果。如果JoinLNN()返回成功dsoftbus会接受连接请求并通过回调通知连接结果。回调中的addr参数与JoinLNN()中的target参数匹配。如果回调中的retCode为0则连接成功此时networkId的值有效将用于数据传输和断开连接API。如果retCode的值不为0则连接失败networkId的值无效。4.2 断开连接使用networkId和回调发起断开连接请求// 断开连接结果回调 typedef void (*OnLeaveLNNResult)(const char *networkId, int32_t retCode); // 发起断开连接请求 int32_t LeaveLNN(const char *pkgName, const char *networkId, OnLeaveLNNResult cb);等待断开连接完成。OnLeaveLNNResult()中的networkId参数与LeaveLNN()中的networkId匹配。如果回调中的retCode为0则断开连接成功否则断开连接失败。如果断开连接成功networkId将失效不能再使用。4.3 设备状态监听注册和注销设备状态变化回调// 设备状态事件 #define EVENT_NODE_STATE_ONLINE 0x1 #define EVENT_NODE_STATE_OFFLINE 0x02 #define EVENT_NODE_STATE_INFO_CHANGED 0x04 #define EVENT_NODE_STATE_MASK 0x07 // 设备信息 typedef struct { char networkId[NETWORK_ID_BUF_LEN]; char deviceName[DEVICE_NAME_BUF_LEN]; uint16_t deviceTypeId; } NodeBasicInfo; // 设备状态事件回调 typedef struct { uint32_t events; // 组网事件掩码 void (*onNodeOnline)(NodeBasicInfo *info); // 设备上线时调用 void (*onNodeOffline)(NodeBasicInfo *info); // 设备下线时调用 void (*onNodeBasicInfoChanged)(NodeBasicInfoType type, NodeBasicInfo *info); // 设备信息变化时调用 } INodeStateCb; // 注册设备状态事件回调 int32_t RegNodeDeviceStateCb(const char *pkgName, INodeStateCb *callback); // 注销设备状态事件回调 int32_t UnregNodeDeviceStateCb(INodeStateCb *callback);五、数据传输高效可靠的信息传递 数据传输是分布式通信的核心功能dsoftbus提供了灵活的会话管理和数据发送接口。5.1 创建会话服务器使用监听器创建会话服务器通过监听器可以监控会话的打开、关闭以及接收消息或字节等事件// 会话管理回调 typedef struct { int (*OnSessionOpened)(int sessionId, int result); void (*OnSessionClosed)(int sessionId); void (*OnBytesReceived)(int sessionId, const void *data, unsigned int dataLen); void (*OnMessageReceived)(int sessionId, const void *data, unsigned int dataLen); void (*OnStreamReceived)(int sessionId, const StreamData *data, const StreamData *ext, const StreamFrameInfo *param); void (*OnQosEvent)(int sessionId, int eventId, int tvCount, const QosTv *tvList); } ISessionListener; // 创建会话服务器 int CreateSessionServer(const char *pkgName, const char *sessionName, const ISessionListener* listener);5.2 打开会话打开用于发送和接收数据的会话// 打开会话 int OpenSession(const char *mySessionName, const char *peerSessionName, const char *peerNetworkId, const char *groupId, const SessionAttribute* attr);5.3 发送数据根据会话ID向对等设备发送数据// 发送字节 int SendBytes(int sessionId, const void *data, unsigned int len); // 发送消息 int SendMessage(int sessionId, const void *data, unsigned int len);5.4 关闭会话和移除服务器关闭指定ID的会话// 关闭会话 void CloseSession(int sessionId);移除会话服务器// 移除会话服务器 int RemoveSessionServer(const char *pkgName, const char *sessionName);注意要跨设备使用RPC必须具有ohos.permission.DISTRIBUTED_DATASYNC权限这是一个危险权限。六、总结与展望 通过本文的介绍我们详细了解了OpenHarmony dsoftbus从设备发现到数据传输的全流程。dsoftbus为开发者提供了统一的分布式通信接口大大简化了跨设备通信的开发难度。无论是智能家居、智能办公还是其他分布式场景dsoftbus都能发挥重要作用。随着物联网技术的不断发展dsoftbus也将不断完善和优化为开发者提供更强大、更稳定的分布式通信能力。期待开发者们能够利用dsoftbus构建出更多创新的分布式应用为用户带来更便捷、更智能的体验。如果你想开始使用dsoftbus进行开发可以通过以下命令克隆仓库git clone https://gitcode.com/openeuler/dsoftbus_standard让我们一起探索dsoftbus的无限可能共同推动分布式应用的发展 【免费下载链接】dsoftbus_standardOpenHarmony dsoftbus项目地址: https://gitcode.com/openeuler/dsoftbus_standard创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考