繁体   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