请教下android的某个so进程的socket怎么绑定到4G上?

dahaiI0 2019-01-24 07:50:25
目的:so进程里有2个socket,默认都是走wifi,现在想让一个走4G一个走wifi。
做法1:activity里开个线程,子线程里创建个socket,通过network绑定到4G,然后把这个socket句柄传递给so进程

mSock = new DatagramSocket();
network.bindSocket(mSock);
ParcelFileDescriptor ps = ParcelFileDescriptor.fromDatagramSocket(mSock);
m_cellsock = ps.getFd();//再通过localsocket把m_cellsock 传递给so进程

结果失败,进程拿到这个fd后无法发数据,错误码为9,无效socket

做法2:so进程创建socket后,把socket句柄值写入文件,activity读文件,用这个fd值创建个socket,再network绑定4G

public static void bindSocketToNetwork(int socketfd) {
L.d("start bindSocketToNetwork");
if (network != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
FileDescriptor fileDescriptor = new FileDescriptor();
try {
Field field = FileDescriptor.class.getDeclaredField("descriptor");
field.setAccessible(true);
field.setInt(fileDescriptor, socketfd);
// fileDescriptor.sync();

network.bindSocket(fileDescriptor);
// bindSocket(socketfd, netId);
L.d("bindSocketToNetwork success: network" + network + "+socketfd" + socketfd);
} catch (Exception e) {
e.printStackTrace();
}
}
}

结果失败,还是socket无效,log输出:java.net.SocketException: getpeername failed: ENOTSOCK (Socket operation on non-socket)

诚心请教so进程里的socket怎样绑定到4G,使得同时存在既走4G又走wifi的2个socket。
...全文
437 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
dahaiI0 2019-01-25
  • 打赏
  • 举报
回复
来几个人接分吧,过几天结贴。
dahaiI0 2019-01-25
  • 打赏
  • 举报
回复
引用 4 楼 王能 的回复:
你这样肯定不行的了,对象都不是一个了当然非法。要么在native层链接并绑定然后写一些方法供java操作,要么全在java做

嗯,直接传值是不行的。之前看了个开源项目进程间用unix domain socket的sendmsg传递,以为只是简单传值。

稍微总结下供以后也有类似需求的人参考
linux里要跨进程传递FD,只有2种方法
1:父子进程,子进程会继承父进程的信息
2:用unix domain socket的sendmsg,如果是android程序,可用localsocket(底层实现是unix domain socket)的setFileDescriptorsForSend函数,效果等价于前者的sendmsg。
王能 2019-01-25
  • 打赏
  • 举报
回复
你这样肯定不行的了,对象都不是一个了当然非法。要么在native层链接并绑定然后写一些方法供java操作,要么全在java做
dahaiI0 2019-01-24
  • 打赏
  • 举报
回复
好像有点想当然了,进程间传递socket句柄貌似得通过(还不确定是否一定要通过这个才能传递)unix domain socket。。试试先。。
weixin_42078893 2019-01-24
  • 打赏
  • 举报
回复
其实我也不知道 只是看下能不能获得tmd积分
dahaiI0 2019-01-24
  • 打赏
  • 举报
回复
是不是在android里,用户自己定义的socket无法跨进程?还是使用有问题?

80,471

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧