相关文章推荐
大方的沙发  ·  C语言中socket使用讲解。_socket ...·  2 周前    · 
豪爽的刺猬  ·  问题 - Microsoft Q&A·  1 月前    · 
追风的毛衣  ·  美女经理痛诉,下半身失控的金融圈!_手机凤凰网·  11 月前    · 
冷静的炒粉  ·  尼日利亚国家明星男篮来校比赛交流·  1 年前    · 
坚韧的松鼠  ·  说医不二:懒兔子漫话中医·  1 年前    · 
安静的包子  ·  港股十年十倍-中航信——领先的航空旅游业信息 ...·  1 年前    · 
Code  ›  【Android 逆向】Android 逆向通用工具开发 ( 网络模块开发 | SOCKET 网络套接字初始化 | 读取远程端 “Android 模拟器“ 信息 | 向远程端写出数据 )-阿里云开发者
初始化 socket printf 套接字
https://developer.aliyun.com/article/865318
含蓄的人字拖
1 年前
产品 解决方案 文档与社区 免费试用 定价 云市场 合作伙伴 支持与服务 了解阿里云
备案 控制台 登录/注册
开发者社区
首页
探索云世界
新手上云 云上应用构建 云上数据管理 云上探索人工智能
云计算 弹性计算 无影 存储 网络 倚天
云原生 容器 serverless 中间件 微服务 可观测 消息队列
数据库 关系型数据库 NoSQL数据库 数据仓库 数据管理工具 PolarDB开源 向量数据库

热门

Modelscope模型即服务 弹性计算 云原生 数据库 物联网 云效DevOps 龙蜥操作系统 平头哥 钉钉开放平台
大数据 大数据计算 实时数仓Hologres 实时计算Flink E-MapReduce DataWorks Elasticsearch 机器学习平台PAI 智能搜索推荐
人工智能 机器学习平台PAI 视觉智能开放平台 智能语音交互 自然语言处理 多模态模型 pythonsdk 通用模型
开发与运维 云效DevOps 钉钉宜搭 支持服务 镜像站 码上公益
问产品
动手实践
考认证
TIANCHI大赛
活动广场
任务中心 飞天Club技术沙龙 训练营 话题 开发者评测 乘风者计划 阿里云MVP 直播
下载
镜像站 技术资料 插件
本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《 阿里云开发者社区用户服务协议 》和 《 阿里云开发者社区知识产权保护指引 》。如果您发现本社区中有涉嫌抄袭的内容,填写 侵权投诉表单 进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

文章目录

前言

一、SOCKET 网络套接字初始化

二、SOCKET 网络套接 读取远程端 ( Android 模拟器 ) 信息

三、SOCKET 网络套接 向远程端 ( Android 模拟器 ) 写出数据

前言

本篇博客重点分析 CNetwork 网络模块 ;






一、SOCKET 网络套接字初始化


在 CNetwork::CNetwork() 构造函数中 , 初始化套接字 , 初始化时设置 无效套接字 INVALID_SOCKET ;


CNetwork::CNetwork()
    // 初始化套接字 , 初始化时设置 无效套接字 INVALID_SOCKET
    m_server = INVALID_SOCKET;
在初次连接时 , 判断当前套接字是否是无效的 ,
如果当前套接字是无效的 , 则初始化网络 , 建立网络连接 ;





    
如果当前套接字不是无效的 , 则关闭当前套接字 , 然后设置为无效套接字 ;
bool CNetwork::WaitClientOnline()
    /* 等待客户端联网时 , 判断当前套接字是否是无效的 ,
    如果当前套接字是无效的 , 则初始化网络 , 建立网络连接
    如果当前套接字不是无效的 , 则关闭当前套接字 , 然后设置为无效套接字
    if (m_server != INVALID_SOCKET) {
  closesocket(m_server);
  m_server = INVALID_SOCKET;
    int ret = 0;
    sockaddr_in server;
    BOOL bsocket;
    m_server = WSASocket(AF_INET, SOCK_STREAM, 0, NULL, 0, WSA_FLAG_OVERLAPPED);
    bsocket = TRUE;
    server.sin_family = AF_INET;
    /* 连接本机 IP 地址 , 如果是与真机连接 , 这里设置手机在局域网的 IP 地址 */
    server.sin_addr.s_addr = inet_addr("127.0.0.1");
    /* 自定义端口 , 手机端 与 PC 端约定一致即可 , 1024 ~ 65535 范围 , 1024 以下是系统使用的端口 */
    server.sin_port = htons(9527);
    /* 正式连接的方法 */
    ret = connect(m_server, (const struct sockaddr*)&server, sizeof(server));
    if (ret < 0) {
  printf("错误信息:%s\n", (LPCSTR)GetErrorString());
  return false;
    return true;
}






二、SOCKET 网络套接 读取远程端 ( Android 模拟器 ) 信息


从 Android 模拟器端获取数据 , 先准备发送的命令 , 将命令拼接成 json 字符串 ;


Json::Value cmd;
    cmd["cmd"] = CMD_READ_DATA;
    std::string s = cmd.toStyledString();


通过 SOCKET 网络通信 , 将数据传递到 Android 模拟器端 ;


/* 通过网络通信 , 将数据传递到远程端 */
    int ret = send(m_server, s.c_str(), s.size(), 0);


之后 , 调用 recv 方法 , 开始阻塞 , 等待远程端返回数据 , 如果接收数据出错 , 返回值小于 0 , 打印出错信息 ;


/* 阻塞 , 等待接收远程反馈信息 */
    char buffer[4096]="";
    ret = recv(m_server, buffer, sizeof buffer, 0);
    /* 如果接收失败 , 打印错误信息 */
    if (ret < 0) {
  printf("错误信息:%s\n", (LPCSTR)GetErrorString());
  return false;
    }


接收到数据后 , 解析该数据 ;


/* 解析接收到的远程数据信息 */
    Json::Reader reader;
    if (reader.parse(buffer, root)) {
  printf("解析数据成功!\n");
  return true;
    }


完整代码 :


/* 读取远程端 ( Android 模拟器 ) 信息 */





    
bool CNetwork::ReadData(Json::Value& root)
    if (m_server == INVALID_SOCKET) {
  printf("客户端没有连接\n");
  return false;
    Json::Value cmd;
    cmd["cmd"] = CMD_READ_DATA;
    std::string s = cmd.toStyledString();
    /* 通过网络通信 , 将数据传递到远程端 */
    int ret = send(m_server, s.c_str(), s.size(), 0);
    /* 发送完成后 , 进行错误判断 */
    if (ret < 0) {
  printf("错误信息:%s\n", (LPCSTR)GetErrorString());
  return false;
    /* 阻塞 , 等待接收远程反馈信息 */
    char buffer[4096]="";
    ret = recv(m_server, buffer, sizeof buffer, 0);
    /* 如果接收失败 , 打印错误信息 */
    if (ret < 0) {
  printf("错误信息:%s\n", (LPCSTR)GetErrorString());
  return false;
    /* 解析接收到的远程数据信息 */
    Json::Reader reader;
    if (reader.parse(buffer, root)) {
  printf("解析数据成功!\n");
  return true;
    printf("解析数据失败:%s\n", buffer);
    return false;
}

、





三、SOCKET 网络套接 向远程端 ( Android 模拟器 ) 写出数据


写出数据比较简单 , 直接将要写出的数据拼接成 json 指令 , 然后直接发送到 Android 模拟器端即可 ;


完整代码实现 :


/* 向远程端 ( Android 模拟器 ) 写出数据 */
bool CNetwork::WriteGold(double gold)
    if (m_server == INVALID_SOCKET) {
  printf("客户端没有连接\n");
  return false;
    /* 拼接要发送的数据信息 */
    Json::Value root;
    root["cmd"] = CMD_WRITE_GOLD;
    root["data"] = gold;
    /* 将 json 数据转为字符串 */
    std::string s = root.toStyledString();
    /* 将转换的字符串发送到 Android 模拟器端 */
    int ret = send(m_server, s.c_str(), s.size(), 0);
    /* 如果发送出错 , 则打印报错信息 */
    if (ret < 0) {
  printf("错误信息:%s\n", (LPCSTR)GetErrorString());
  return false;
    return true;
                        【Android 逆向】Android 逆向通用工具开发 ( 网络模块开发 | 配置头文件 | 配置编译参数 | 网络初始化 WSAStartup 与清理 WSACleanup 操作 )
                    
【Android 逆向】Android 逆向通用工具开发 ( 网络模块开发 | 配置头文件 | 配置编译参数 | 网络初始化 WSAStartup 与清理 WSACleanup 操作 )
【保姆级教程】 全网最强HTTP+Fiddler抓包实战超级全面图文教程 《Fiddler 插件扩展---CertMaker for iOS and Android 插件和Syntax-Highlighting Add-Ons插件》
 
推荐文章
大方的沙发  ·  C语言中socket使用讲解。_socket c语言
2 周前
豪爽的刺猬  ·  问题 - Microsoft Q&A
1 月前
追风的毛衣  ·  美女经理痛诉,下半身失控的金融圈!_手机凤凰网
11 月前
冷静的炒粉  ·  尼日利亚国家明星男篮来校比赛交流
1 年前
坚韧的松鼠  ·  说医不二:懒兔子漫话中医
1 年前
安静的包子  ·  港股十年十倍-中航信——领先的航空旅游业信息技术服务商 公司简介:$中国民航信息网络(00696)$ 正式组建于2002年10月,是专业从事航空运输旅游信息服务的大型国有独资高... - 雪球
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号