将binder和socketpair结合实现任意进程间的双向通讯

2024-03-23 01:38

本文主要是介绍将binder和socketpair结合实现任意进程间的双向通讯,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

binder机制是Android系统中特有的实现进程间远程通信的机制,它是基于C/S模式来实现的,一般一个是client端,一个是server端;而socketpair机制可以实现双向通讯,但是通讯范围限制在同一个进程的线程之间或者是具有亲缘关系的进程之间。本文通过将这两种机制结合起来,实现任意两个进程间的双向通讯。

作者本人能力有限,文中有说的不对或者不合理的地方还请多多指教。


一、基本开发环境和实现原理

1、基本开发环境

操作系统:Ubuntu12.04 64bit

交叉编译工具版本:gcc version 4.5.1 (ctng-1.8.1-FA)

Android系统版本:5.0.2

编程语言:C++

2、实现原理

socketpair在实例化时会创建两个文件描述符,分别用于双向通讯的两端,我们只要把其中的一个文件描述符通过binder机制传递给另外一个进程不就可以实现这两个进程间的双向通讯了。所以要做的工作主要就是在服务器端是实现一个方法来获取到这个文件描述符,然后通过binder机制传递给客服端。(注意:这里并不是简单的把文件描述符传递过去,具体内容可以参考相关资料)。


二、具体的实现

为了实现这个目的,编写了如下文件:

ISocketpairService.h : 实现一个接口文件,这个文件中实现了获取文件描述符的纯虚方法。

BnSocketpairService.cpp : Binder的本地类的实现,主要用于获取socketpair实例化的文件描述符

BpSocketpairService.cpp : Binder的代理类的实现,获取本地类传递过来的文件描述符

socketpair_server.cpp  : 服务器端的实现,把binder服务加入到Android系统当中,实现和客服端的双向通讯

socketpair_client.cpp : 客服端的实现,从Android系统中获取代理类对象,实现和服务器端的双向通讯


1、ISocketpairService.h

这个文件主要实现了接口类和本地类的定义,具体如下:

#ifndef ANDROID_ISOCKETPAIRSERVICE_H
#define ANDROID_ISOCKETPAIRSERVICE_H#include <utils/Errors.h>  // for status_t
#include <utils/KeyedVec

这篇关于将binder和socketpair结合实现任意进程间的双向通讯的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/836735

相关文章

Linux实现查看某一端口是否开放

《Linux实现查看某一端口是否开放》文章介绍了三种检查端口6379是否开放的方法:通过lsof查看进程占用,用netstat区分TCP/UDP监听状态,以及用telnet测试远程连接可达性... 目录1、使用lsof 命令来查看端口是否开放2、使用netstat 命令来查看端口是否开放3、使用telnet

Linux系统管理与进程任务管理方式

《Linux系统管理与进程任务管理方式》本文系统讲解Linux管理核心技能,涵盖引导流程、服务控制(Systemd与GRUB2)、进程管理(前台/后台运行、工具使用)、计划任务(at/cron)及常用... 目录引言一、linux系统引导过程与服务控制1.1 系统引导的五个关键阶段1.2 GRUB2的进化优

使用SpringBoot+InfluxDB实现高效数据存储与查询

《使用SpringBoot+InfluxDB实现高效数据存储与查询》InfluxDB是一个开源的时间序列数据库,特别适合处理带有时间戳的监控数据、指标数据等,下面详细介绍如何在SpringBoot项目... 目录1、项目介绍2、 InfluxDB 介绍3、Spring Boot 配置 InfluxDB4、I

基于Java和FFmpeg实现视频压缩和剪辑功能

《基于Java和FFmpeg实现视频压缩和剪辑功能》在视频处理开发中,压缩和剪辑是常见的需求,本文将介绍如何使用Java结合FFmpeg实现视频压缩和剪辑功能,同时去除数据库操作,仅专注于视频处理,需... 目录引言1. 环境准备1.1 项目依赖1.2 安装 FFmpeg2. 视频压缩功能实现2.1 主要功

使用Python实现无损放大图片功能

《使用Python实现无损放大图片功能》本文介绍了如何使用Python的Pillow库进行无损图片放大,区分了JPEG和PNG格式在放大过程中的特点,并给出了示例代码,JPEG格式可能受压缩影响,需先... 目录一、什么是无损放大?二、实现方法步骤1:读取图片步骤2:无损放大图片步骤3:保存图片三、示php

使用Python实现一个简易计算器的新手指南

《使用Python实现一个简易计算器的新手指南》计算器是编程入门的经典项目,它涵盖了变量、输入输出、条件判断等核心编程概念,通过这个小项目,可以快速掌握Python的基础语法,并为后续更复杂的项目打下... 目录准备工作基础概念解析分步实现计算器第一步:获取用户输入第二步:实现基本运算第三步:显示计算结果进

Python多线程实现大文件快速下载的代码实现

《Python多线程实现大文件快速下载的代码实现》在互联网时代,文件下载是日常操作之一,尤其是大文件,然而,网络条件不稳定或带宽有限时,下载速度会变得很慢,本文将介绍如何使用Python实现多线程下载... 目录引言一、多线程下载原理二、python实现多线程下载代码说明:三、实战案例四、注意事项五、总结引

Python利用PySpark和Kafka实现流处理引擎构建指南

《Python利用PySpark和Kafka实现流处理引擎构建指南》本文将深入解剖基于Python的实时处理黄金组合:Kafka(分布式消息队列)与PySpark(分布式计算引擎)的化学反应,并构建一... 目录引言:数据洪流时代的生存法则第一章 Kafka:数据世界的中央神经系统消息引擎核心设计哲学高吞吐

C++ STL-string类底层实现过程

《C++STL-string类底层实现过程》本文实现了一个简易的string类,涵盖动态数组存储、深拷贝机制、迭代器支持、容量调整、字符串修改、运算符重载等功能,模拟标准string核心特性,重点强... 目录实现框架一、默认成员函数1.默认构造函数2.构造函数3.拷贝构造函数(重点)4.赋值运算符重载函数

Java调用Python脚本实现HelloWorld的示例详解

《Java调用Python脚本实现HelloWorld的示例详解》作为程序员,我们经常会遇到需要在Java项目中调用Python脚本的场景,下面我们来看看如何从基础到进阶,一步步实现Java与Pyth... 目录一、环境准备二、基础调用:使用 Runtime.exec()2.1 实现步骤2.2 代码解析三、