簡體   English   中英

使用C ++應用在Android下監聽套接字

[英]Listening on socket under Android with C++ app

我將需要創建在Android 5(root用戶)下以非特權用戶身份運行的C ++控制台應用程序。 該應用程序偵聽某些套接字端口並接受連接。 它通過boost::asio 當應用程序作為根運行時,一切正常。 當它以普通用戶身份運行時,應用程序在嘗試打開接受器時崩潰:

    const boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::address::from_string("127.0.0.1"), 3784);
    boost::asio::ip::tcp::acceptor acceptor(ioService);
    acceptor.open(endpoint.protocol()); // Here it throws an exception

異常有點令人困惑,但可能意味着我沒有觸摸套接字的訪問權限:

terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::system::system_error> >'
what():  open: Permission denied
Aborted

我試圖在用戶shell程序和用戶media下運行應用程序。 我還嘗試在分配給我設備上的ProxyDroid用戶u0_a83下運行它。

我更改了/system/etc/permissions/platform.xml我為用戶shellmedia分配了android.permission.INTERNET權限。 我還嘗試將組媒體添加到android.permission.INTERNET ,但是沒有任何幫助。

順便說一句。 當我確實需要在C ++中實現應用程序以在Android下運行時,這是一個特例。 在我的項目中,Java的實現是不可接受的。

似乎最好的解決方案是使用在Android中預定義並與系統上可用功能相對應的用戶: https//android.googlesource.com/platform/system/core/+/master/include/private/android_filesystem_config。 ^ h 就我而言,我可以在可以創建套接字的用戶inet(3003)下運行該應用程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM