无法连接到 android 5.1 上的本机本地套接字

2023-12-02

我有命令行工具,它发送广播并等待结果。

服务器代码(错误处理省略):

    int makeAddr(const char* name, struct sockaddr_un* pAddr, socklen_t* pSockLen)
    {
        int nameLen = strlen(name);
        pAddr->sun_path[0] = '\0';
        strcpy(pAddr->sun_path+1, name);
        pAddr->sun_family = AF_LOCAL;
        *pSockLen = 1 + nameLen + offsetof(struct sockaddr_un, sun_path);
        return 0;
    }

    int main(int argc, char* argv[])
    {
        //...

        // Create socket in abstract namespace
        struct sockaddr_un sockAddr = {0};
        socklen_t sockLen;
        makeAddr("SOCKET_NAME", &sockAddr, &sockLen);

        int serverFd = socket(AF_LOCAL, SOCK_STREAM, PF_UNIX));

        bind(serverFd, (const struct sockaddr*) &sockAddr, sockLen);

        listen(serverFd, 5);

        //set socket non-blocking
        int flags = fcntl(serverFd, F_GETFL, 0);
        fcntl(serverFd, F_SETFL, flags | O_NONBLOCK);

        pollfd pollFd = {0};
        pollFd.fd = serverFd;
        pollFd.events = POLLIN | POLLRDHUP;

        // Send brodcast 
        system("am broadcast ...");

        for(;;)
        {
            // Wait result 
            int pollResult = poll(&pollFd, 1, timeout);
        // Process result

Java客户端代码:

public class CommandReceiver extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {

            LocalSocket socket = new LocalSocket();
            LocalSocketAddress address = new LocalSocketAddress("SOCKET_NAME", LocalSocketAddress.Namespace.ABSTRACT);
            socket.connect(address);

            // Do something and send result asynchronously 

这一切都适用于 Android 5.1 之前的版本。

在 android 5.1 connect() 上抛出异常:

java.io.IOException:权限被拒绝

在 android.net.LocalSocketImpl.connectLocal(本机方法)

在 android.net.LocalSocketImpl.connect(LocalSocketImpl.java:290)

在 android.net.LocalSocket.connect(LocalSocket.java:130)

日志中有错误:

07-27 09:56:08.179:W:类型= 1400审核(0.0:3675):avc:拒绝{连接}路径= 00636F6D2E6B6173706572736B792E6B617368656C6C2E534F434B45542D3631383836 3731373231343337393833373637 scontext=u:r:untrusted_app:s0 tcontext=u:r:shell:s0 tclass =unix_stream_socket 许可=0

我找到了相关的 android 修复:https://android.googlesource.com/device/moto/shamu/+/b2db40f

那么,从android 5.1开始,它就不再工作了吗? 我能做什么(也许以某种方式设置权限)? 或者是否有另一种机制可以从本机命令行工具发送数据并等待结果?


使用管道代替套接字:使用 poll() 命名管道上的 O_RDWR

在java进程中创建管道:

        mkfifo(cpath, 0);
        chmod(cpath, S_IRWXU|S_IROTH|S_IRGRP);

在本机进程中打开管道:

int serverFd = open(PIPE_NAME, O_RDONLY | O_NONBLOCK);
pollfd pollFd = {0};
pollFd.fd = serverFd.get();
pollFd.events = POLLIN | POLLRDHUP;

// send command
....

for(;;)
{
    int pollResult = poll(&pollFd, 1, timeout);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法连接到 android 5.1 上的本机本地套接字 的相关文章

  • startActivity overridePendingTransition 只显示进入动画

    基本上 我遇到的问题是只显示输入幻灯片动画 调用 Activity 不会产生动画 startActivity intent overridePendingTransition R anim right in partly R anim le
  • 导航组件参数默认值

    在导航组件中 将参数从第一个片段发送到第二个片段时 默认值不会从导航图中获取哪个集合 这是我的代码 导航图 xml
  • 如何将 Android Instrumentation 测试推送到模拟器/设备?

    我正在尝试使用 Ubuntu 9 04 中的命令行 shell 在 Android 模拟器上运行 Webkit 布局测试 adb s emulator 5554 shell am instrument w com android dumpr
  • ListView:防止视图回收

    我有一个使用回收视图的 ListView 我试图阻止视图被回收 所以我使用 setHasTransientState android support v4 view ViewCompatJB setHasTransientState Vie
  • 游标索引越界异常

    打开后出现光标索引越界错误 数据库 请任何人告诉我如何打开现有数据库 sqllite Android 我想在数据库上触发一个选择查询 检索一些信息 public void getPatient SQLiteDatabase db Strin
  • 在浏览器中打开 URL,即使我的应用程序为其注册了意图过滤器

    我的应用程序为某些 URL 注册了一个意图过滤器 因为它可以处理来自这些 URL 的数据 但是 在应用程序内部 我想提供一个按钮来在浏览器中打开这样的 URL 也就是说 如果设置了默认浏览器 则在默认浏览器中打开它 否则提供一个选择器 就像
  • 需要在 Android 中伪造正在扫描的 NFC 标签

    好的 我有一个应用程序 此应用程序仅在扫描 NFC 标签 任何标签 时才会完成任务 唯一的问题是 我没有任何 nfc 标签 无论如何 我正试图消除对卡的需要 所以我需要的是一种 伪造 使其看起来 就像已扫描 nfc 标签的方法 我可以编写应
  • android:进程和进程名称

    我试图理解android process属性 Ref says http developer android com guide topics manifest application element html proc 如果分配给该属性的
  • 在 Android 中始终以横向模式打开相机

    在我的 Android 应用程序中 单击按钮后我希望相机以横向模式打开 即使我将手机旋转为纵向模式 相机也应始终处于横向模式或纵向模式 使用此代码在横向模式下打开相机 Intent cameraIntent new Intent Media
  • 使用 RxJava 限制吞吐量

    我现在遇到的情况很难解释 所以我会写一个更简单的版本来解释这个问题 我有一个Observable from 它发出一系列由ArrayList文件数量 所有这些文件都应上传到服务器 为此 我有一个函数可以完成这项工作并返回一个Observab
  • Android:BATTERY_STATUS_DISCHARGING 和 BATTERY_STATUS_NOT_CHARGING 之间的区别

    我想知道这两个标志之间的区别 BatteryManager BATTERY STATUS DISCHARGING And BatteryManager BATTERY STATUS NOT CHARGING 我开发了一个使用这两个标志的应用
  • 我应该选择的最低 SDK 版本是多少? (截至2018年11月)

    据我所知 android studio 中默认的最小 SDK 设置是 15 我读到我应该增加它 因为没有多少人 或者可能没有 仍在使用该 android 版本 另外 我计划使用 android studio 中的一些新功能 这些功能仅适用于
  • Android - 多次实例化一个片段?

    我正在创建一个在 ListView 中显示数据的应用程序 数据分为两种类型 热门 收藏夹 我有一个活动和两个片段 片段根据类别显示项目列表 我为此使用了 ListView 然后我有两个fragment layouts 它们在设计上完全相同
  • 按名称获取 ArrayList

    这是正确的获取方式吗ArrayList
  • 有没有办法在多个嵌套的 RecyclerView 之间共享同一个 LayoutManager

    我正在开发一个显示游戏列表的应用程序 在每个游戏的 itemView 内 我还有一个要显示的视频列表 预览和结构如下 我部署了一个RecyclerView作为窗口根视图 然后对于视频 我使用网格样式的RecyclerView来显示 所以这里
  • 在 android 中,第一次单击时按钮侦听器未注册

    因为我是 Android 新手 所以我遇到了按钮监听器的问题 我正在使用 OnClickListener 来处理胸像 但它第一次点击后不执行一旦我单击多个 它就会表现良好 但如何使其在第一次单击时成为可能 这是我的代码 public cla
  • 如何在 onDraw() 方法中定义与像素无关的高度

    我扩展了 View 来构建自定义小部件 我想用独立的像素单位定义小部件的高度 我认为可以通过将像素密度乘以所需的高度来完成 但我不知道该怎么做 到目前为止我所拥有的 最小化 public class Timeline extends Vie
  • 使用 RecyclerView.Adapter 在 onBindViewHolder() 内设置 onItemClickListener

    我有一个自定义对象 学生班 public class Student private String name private String age public String getName return name public void
  • SocketIO + Flask 检测断开连接

    我在这里有一个不同的问题 但意识到它可以简化为 如何检测客户端何时从页面断开连接 关闭其页面或单击链接 换句话说 套接字连接关闭 我想制作一个带有更新用户列表的聊天应用程序 并且我在 Python 上使用 Flask 当用户连接时 浏览器发
  • Android Espresso - 如果未选中,请单击复选框

    I have onView withId R id check box perform click 但我只想在尚未选中该复选框时执行此操作 我怎样才能在浓缩咖啡中做到这一点 我还想根据其之前的状态来切换复选框 开关 起初 我尝试用此方法打开

随机推荐

  • 如何使用 PHP 发送带有附件的电子邮件?

    我正在使用以下代码发送带有附件的电子邮件 但正确的文件没有附加到邮件中 UnidID COOKIE UniqueID guid COOKIE guid target path userdata UniqueID iGuid Outputs
  • 选择满足不同记录中许多条件的列

    我有这样的表 Customer Product 1 1 1 2 1 3 2 1 2 2 2 2 我想选择购买了产品 1 AND 2 AND 3 的客户 因此我的查询应返回 1 如何实现这一点 如果您想要购买所有 3 个产品的客户 您可以使用
  • ansible 在 OSX 上找不到 pycurl

    我刚刚开始使用 ansible 我正在尝试让它与linodeOSX Yosemite 的模块 我正在使用brew安装的Python和pip安装的ansible 所以我做了以下事情 brew install python PYCURL SSL
  • 如何在浏览器 JS 控制台中包含脚本时覆盖内容安全策略?

    我试图以这种方式使用控制台将 JQuery 包含在现有网站上 var script document createElement script script src http code jquery com jquery 1 11 1 mi
  • 在 jQuery 中搜索和突出显示

    我想使用 jQuery Javascript 搜索并突出显示文本 示例 HTML 1 div b Good b b Morning b div div Good Evening div div Good Morning div Search
  • 添加 Maven 支持后 JavaFX 项目出现问题(应用程序启动方法中出现异常)

    我使用 JDK 1 8 创建了一个 JavaFX 项目 工作正常 但如果我尝试添加 Maven 支持 编译就会失败 首先 我尝试在 Java 11 中使用 JavaFX 11 执行此操作 但效果是相同的 我花了两天时间寻找它不起作用的原因
  • Oracle sql查询联合操作?

    我有两张桌子 TableA and TableB 这两个表都有一些包含两列的数据 如下所示 TableA id Name 1 abc 2 def TableB id Name 1 xyz 2 pqr 现在我将从我的应用程序中传递 id 列表
  • 在解释器中从 python 对象获取 ast

    我正在构建一个应用程序 我希望天真的用户为其定义一个简单的函数 然后我想采用这个函数并将其转换为抽象语法树 这也应该在交互式会话期间起作用 即使用解释器 这是我迄今为止在解释器中尝试过的 dill source getsource meth
  • jQuery/Javascript 框架效率

    我的最新项目是使用 javascript 框架 jQuery 以及一些插件 验证 jquery ui datepicker facebox 来帮助制作现代 Web 应用程序 我现在发现页面加载速度比我习惯的要慢 经过一些 js 分析 感谢
  • 使用 R 连接到 Twitter Streaming API

    我刚刚开始使用 Twitter Streaming API 并使用命令行 使用以下命令将原始 JSON 响应重定向到文件 curl https stream twitter com 1 statuses sample json u USER
  • 从“const char*”到“char”的转换无效

    我正在尝试使用以下代码行将字符串中的某个字符替换为空格 str i 如何在不出现问题标题错误的情况下实现这一点 使用单引号 str i 在 C 中 令牌 是一个字符串文字 表示两个字符的数组 字符集中的空格值 例如 ascii 中的值 32
  • 如何动态地将源添加到现有图表?

    什么可以替代动态改变运行图 这是我的情况 我有将文章摄取到数据库中的图表 文章来自 3 个不同格式的插件 因此我有几个流程 val converterFlow1 Flow ImpArticle Article NotUsed val con
  • PHP SSLstream_socket_client不会使用创建的$context

    我完全失望了 我正在连接到 ssl 服务器 并且直接连接运行良好 但是当我尝试添加流上下文以使用代理或socks5时 套接字不会使用它并且直接连接到这些 ssl 服务器非常好 我我正在通过观察 127 0 0 1 代理服务器日志进行检查 甚
  • 在 Windows 上开发 Python 和 Django 应用程序时的 .gitignore

    我应该改变什么 gitignore当我在 Windows 上使用 PTVS 开发 Python Django 应用程序时 文件是什么 GitHub 有一个不错的收集 gitignore模板 当我启动 Django 项目时 我抓住了Pytho
  • Android 中的电话号码格式

    在我的应用程序中 我有一个 editText 它将接受用户的电话号码 我的目标是 一旦用户输入电话号码 它就应该被格式化 就像通过在文本更 改侦听器上应用一样 格式就像XXX XXX XXXX 我将代码写为 ePhone addTextCh
  • Python isDisjoint() 运行时

    Python 2 7 的算法运行时是多少isDisjoint other 集合的方法 它比简单地做更快吗intersection other 然后检查len gt 0那个返回的交集 这两种情况的复杂性都是O min len s len t
  • python 2.7 的非 ASCII 标识符

    我知道在 python 3 x 中我可以使用非 ASCII 标识符 PEP 3131 x1 2 x2 4 x x2 x1 print x python 2 7有这样的功能吗 也许 有人将它移植到 2 x 分支吗 不 Python 2 中没有
  • 调用 C# 代码时,PowerShell $null 不再为 null

    在 PowerShell 中 我们可以定义 C 代码并执行它 将 null 传递到以下最简单的函数中表明 not null 被传递到函数中 Add Type TypeDefinition public static class foo pu
  • 用于访问另一个域上的文件的 CORS 标头

    我正在尝试在 Codepen 上创建一个音频可视化程序 我使用 apache 创建了自己的 Ubuntu Web 服务器 它允许我直接访问以修改服务器的标头和配置 虽然浏览器可以访问不同域上的文件 但它需要特殊的 CORS 标头来读取音频中
  • 无法连接到 android 5.1 上的本机本地套接字

    我有命令行工具 它发送广播并等待结果 服务器代码 错误处理省略 int makeAddr const char name struct sockaddr un pAddr socklen t pSockLen int nameLen str