信息发布软件,b2b软件,广告发布软件

 找回密码
 立即注册
搜索
查看: 1|回复: 0
打印 上一主题 下一主题

[宣传软件网站动态] 本地调试版原生websocket版

[复制链接]

1958

主题

1968

帖子

1万

积分

积分
11476

资讯缩略图:

资讯发布日期:2026-08-19

资讯发布简介:本地调试版原生websocket版

资讯关键词:本地调试版原生websocket版

资讯所属分类:IT资讯 

联系:

① 本信息收集于网络,如有不对的地方欢迎联系我纠正!
② 本信息免费收录,不存在价格的问题!
③ 如果您的网站也想这样出现在这里,请您加好友情链接,我当天会审核通过!

④友情链接关键字:软件网站分类目录 网址:http://www.postbbs.com/

资讯详细描述
本地调试版原生websocket版
本地调试版原生websocket版 b2b软件
  1. /**
  2. * WebSocket 屏幕截图传输 - 本地调试版(AIWROK 原生 websocket 版)
  3. *
  4. * 👉 参考 AIWROK IDE 文档,5 个原生 API 正确签名:
  5. *    void setSocketID(String arg0)
  6. *    void event(Function arg0=连接成功, Function arg1=接收消息,
  7. *               Function arg2=连接失败, Function arg3=断开连接)
  8. *    void connet(String wsUrl)      ← 注意拼写:connet(双n少c,不是 connect)
  9. *    void send(Object msg)
  10. *    void close()
  11. *
  12. * 配合 WebSocket测试服务器 使用
  13. */


  14. print.log("===== WebSocket 屏幕截图传输(AIWROK 原生版)开始 =====");

  15. // ========== 配置 ==========
  16. var config = {
  17.     serverUrl: "192.168.10.103:8886",   // ← 改成 PC 的局域网 IP:端口
  18.     screenshotInterval: 5000,            // 截图间隔(毫秒)
  19.     reconnectInterval: 2500,             // 重连间隔(毫秒)
  20.     maxReconnectAttempts: 10,            // 最大重连次数
  21.     connectWaitSec: 15,                  // 单次连接等待秒数
  22.     runDuration: 30000                   // 总运行时长(毫秒)
  23. };

  24. // ========== 连接状态 ==========
  25. var ws = null;          // websocket 实例
  26. var state = {
  27.     connected: false,
  28.     err: null,
  29.     closed: false,
  30.     saveDir: "",
  31.     saveUrlPrefix: "",
  32.     imgCount: 0,
  33.     reconnectAttempts: 0,
  34.     totalSent: 0
  35. };
  36. var screenshotTimer = null;

  37. // ========== 服务器消息解析 ==========
  38. function parseServerMessage(raw) {
  39.     if (typeof raw !== "string") {
  40.         try { raw = String(raw); } catch (e) { raw = "" + raw; }
  41.     }
  42.     var out = { type: "UNKNOWN", raw: raw };
  43.     if (raw.indexOf("WELCOME|") === 0) {
  44.         out.type = "WELCOME";
  45.         var parts = raw.split("|");
  46.         out.id = parts[1] || "";
  47.         for (var i = 2; i < parts.length; i++) {
  48.             var eqIdx = parts[i].indexOf("=");
  49.             if (eqIdx > 0) out[parts[i].substring(0, eqIdx)] = parts[i].substring(eqIdx + 1);
  50.         }
  51.     } else if (raw.indexOf("IMG_SAVED|") === 0) {
  52.         out.type = "IMG_SAVED";
  53.         var p = raw.split("|");
  54.         out.seq = p[1] || "";
  55.         out.sizeTxt = p[2] || "";
  56.         out.absPath = p[3] || "";
  57.         out.fileUrl = p[4] || "";
  58.     } else if (raw.indexOf("IMG_FAIL|") === 0) {
  59.         out.type = "IMG_FAIL";
  60.     } else if (raw.indexOf("ECHO|") === 0) {
  61.         out.type = "ECHO";
  62.         out.text = raw.substring("ECHO|".length);
  63.     }
  64.     return out;
  65. }

  66. // ========== 核心:用 AIWROK 原生 5 API 建立连接 ==========
  67. function initWebSocket() {
  68.     // 重置状态
  69.     state.connected = false;
  70.     state.err = null;
  71.     state.closed = false;

  72.     // ① 创建
  73.     ws = new websocket();

  74.     // ② setSocketID
  75.     try { ws.setSocketID("screen_" + (new Date().getTime())); }
  76.     catch (e) { printl("  ⚠️  setSocketID 忽略异常: " + e.message); }

  77.     // ③ event(4 个位置回调,顺序不能错!)
  78.     //   arg0 = 连接成功   arg1 = 接收消息   arg2 = 连接失败   arg3 = 断开
  79.     try {
  80.         ws.event(
  81.             function () {                              // arg0 连接成功
  82.                 state.connected = true;
  83.                 state.err = null;
  84.                 state.reconnectAttempts = 0;
  85.                 print.log("WS: onopen");
  86.                 printl("✅ 连接成功(onopen)");
  87.                 startScreenshotTimer();
  88.             },
  89.             function (msg) {                           // arg1 接收消息
  90.                 var raw;
  91.                 try { raw = String(msg); } catch (e) { raw = ""; }
  92.                 print.log("WS: onmessage len=" + raw.length);
  93.                 var parsed = parseServerMessage(raw);

  94.                 if (parsed.type === "WELCOME") {
  95.                     state.saveDir = parsed.save_dir || "";
  96.                     state.saveUrlPrefix = parsed.save_file_url || "";
  97.                     printl("&#128233; WELCOME " + parsed.id);
  98.                     if (state.saveDir) {
  99.                         printl("&#128193; 保存目录: " + state.saveDir);
  100.                         printl("&#128279; 目录URL: " + state.saveUrlPrefix);
  101.                     }
  102.                 } else if (parsed.type === "IMG_SAVED") {
  103.                     printl("&#128190; PC 已保存图片 " + parsed.seq);
  104.                     printl("    大小: " + parsed.sizeTxt);
  105.                     printl("    路径: " + parsed.absPath);
  106.                     printl("    � " + parsed.fileUrl);
  107.                 } else if (parsed.type === "IMG_FAIL") {
  108.                     printl("&#128308; 服务器保存失败: " + raw);
  109.                 } else if (parsed.type === "ECHO") {
  110.                     printl("&#128233; 回显: " + parsed.text.substring(0, 150));
  111.                 } else {
  112.                     printl("&#128233; 收到: " + raw.substring(0, 200) + (raw.length > 200 ? "..." : ""));
  113.                 }
  114.             },
  115.             function (err) {                           // arg2 连接失败
  116.                 var msg = "";
  117.                 try { msg = String(err); } catch (e) {}
  118.                 state.err = msg || "连接失败";
  119.                 state.connected = false;
  120.                 print.log("WS: onerror " + msg);
  121.                 printl("❌ 连接失败(onerror): " + msg);
  122.                 stopScreenshotTimer();
  123.                 reconnectWebSocket();
  124.             },
  125.             function () {                              // arg3 断开
  126.                 state.closed = true;
  127.                 state.connected = false;
  128.                 print.log("WS: onclose");
  129.                 printl("⚪ 连接断开(onclose)");
  130.                 stopScreenshotTimer();
  131.                 reconnectWebSocket();
  132.             }
  133.         );
  134.     } catch (e) {
  135.         printl("❌ event(4回调) 注册失败: " + e.message);
  136.         reconnectWebSocket();
  137.         return;
  138.     }

  139.     // ④ connet(双 n 少 c,千万别写成 connect)
  140.     try {
  141.         var url = "ws://" + config.serverUrl;
  142.         printl("正在连接: " + url + "(" + config.connectWaitSec + " 秒超时)");
  143.         print.log("调用 connet(" + url + ")");
  144.         ws.connet(url);
  145.     } catch (e) {
  146.         printl("❌ connet 抛异常: " + e.message);
  147.         state.err = e.message;
  148.         reconnectWebSocket();
  149.         return;
  150.     }

  151.     // 同步等待:如果在 connectWaitSec 秒内既没触发 onopen 也没 onerror,就当作失败
  152.     var waited = 0;
  153.     while (!state.connected && !state.err && waited < config.connectWaitSec * 1000) {
  154.         sleep.millisecond(100);
  155.         waited += 100;
  156.     }
  157.     if (!state.connected && !state.err) {
  158.         state.err = "连接超时(" + config.connectWaitSec + " 秒内没有 onopen/onerror)";
  159.         printl("❌ " + state.err);
  160.         reconnectWebSocket();
  161.     }
  162. }

  163. // ========== 断线重连 ==========
  164. function reconnectWebSocket() {
  165.     if (state.reconnectAttempts >= config.maxReconnectAttempts) {
  166.         printl("&#128721; 已达到最大重连次数 " + config.maxReconnectAttempts + ",停止重连");
  167.         return;
  168.     }
  169.     state.reconnectAttempts++;
  170.     printl("⏱️  重连 " + state.reconnectAttempts + "/" + config.maxReconnectAttempts + "," + (config.reconnectInterval / 1000) + " 秒后重试...");
  171.     printl("重连 " + state.reconnectAttempts + "/" + config.maxReconnectAttempts);

  172.     // 先关旧连接
  173.     try { if (ws) ws.close(); } catch (e) {}
  174.     ws = null;

  175.     setTimeout(function () {
  176.         initWebSocket();
  177.     }, config.reconnectInterval);
  178. }

  179. // ========== 截图并发送 ==========
  180. function sendScreenshot() {
  181.     if (!ws || !state.connected) {
  182.         print.log("跳过截图:未连接");
  183.         return;
  184.     }
  185.     try {
  186.         print.log("&#128248; 截取屏幕...");
  187.         printl("&#128248; 截图中...");

  188.         var screenshot = screen.screenShotFull();
  189.         if (!screenshot) { printl("❌ 截图失败"); return; }

  190.         print.log("&#128260; 转 Base64...");
  191.         var base64Data = "" + screenshot.toBase64();   // 强转成 JS 字符串

  192.         var sizeChars = base64Data.length;
  193.         var sizeKB = Math.round((sizeChars * 0.75) / 1024);   // 粗略估算真实字节
  194.         printl("&#128230; 图片大小: " + sizeChars + " 字符(约 " + sizeKB + " KB)");

  195.         try { screenshot.recycle(); } catch (e) {}   // 释放 Java Bitmap 内存

  196.         state.totalSent++;
  197.         printl("&#128228; 发送图片 #" + state.totalSent + " ...");
  198.         ws.send(base64Data);
  199.         state.imgCount++;
  200.         printl("✅ 已发送图片 #" + state.totalSent + "(" + sizeKB + " KB)");

  201.     } catch (e) {
  202.         printl("❌ 发送截图出错: " + e.message);
  203.         print.log("sendScreenshot 异常: " + e.message);
  204.     }
  205. }

  206. // ========== 定时截图定时器 ==========
  207. function startScreenshotTimer() {
  208.     if (screenshotTimer) { try { clearInterval(screenshotTimer); } catch (e) {} }

  209.     print.log("启动定时截图,间隔 " + config.screenshotInterval + " 毫秒");
  210.     printl("⏰ 定时截图已启动(间隔 " + (config.screenshotInterval / 1000) + " 秒)");

  211.     // 立即发第一张
  212.     setTimeout(function () { sendScreenshot(); }, 300);

  213.     screenshotTimer = setInterval(function () {
  214.         if (state.connected) sendScreenshot();
  215.     }, config.screenshotInterval);
  216. }

  217. function stopScreenshotTimer() {
  218.     if (screenshotTimer) {
  219.         try { clearInterval(screenshotTimer); } catch (e) {}
  220.         screenshotTimer = null;
  221.         print.log("停止定时截图");
  222.     }
  223. }

  224. // ========== 关闭连接 ==========
  225. function disconnectWebSocket() {
  226.     stopScreenshotTimer();
  227.     if (ws) {
  228.         try { ws.close(); } catch (e) {}
  229.         ws = null;
  230.     }
  231.     state.connected = false;
  232.     state.closed = true;
  233.     printl("&#128268; 已关闭连接");
  234. }

  235. // ========== 主程序入口 ==========
  236. function main() {
  237.     try {
  238.         printl("========================================");
  239.         printl("  WebSocket 屏幕截图传输 - 原生版");
  240.         printl("  服务器: " + config.serverUrl);
  241.         printl("  总运行: " + (config.runDuration / 1000) + " 秒    截图间隔: " + (config.screenshotInterval / 1000) + " 秒");
  242.         printl("  连接API: setSocketID → event(4回调) → connet → send → close");
  243.         printl("========================================");
  244.         printl("ℹ️ 确保 PC 已运行: python WebSocket测试服务器");

  245.         // 启动连接(带异步重试)
  246.         initWebSocket();

  247.         // 总运行时长倒计时
  248.         print.log("运行 " + (config.runDuration / 1000) + " 秒后自动结束");
  249.         printl("⏳ 运行 " + (config.runDuration / 1000) + " 秒后自动结束");
  250.         sleep.millisecond(config.runDuration);

  251.         // 结束
  252.         disconnectWebSocket();

  253.         printl("");
  254.         printl("===== 执行结束 =====");
  255.         printl("  尝试发送: " + state.totalSent + " 张");
  256.         printl("  计数显示: " + state.imgCount + " 张");
  257.         if (state.saveDir) printl("  PC 保存目录: " + state.saveDir);
  258.         print.log("===== 屏幕截图传输结束,发送 " + state.totalSent + " 张 =====");

  259.     } catch (e) {
  260.         print.log("主程序异常: " + e.message);
  261.         printl("❌ 程序错误: " + e.message);
  262.         try { disconnectWebSocket(); } catch (e2) {}
  263.     }
  264. }

  265. main();
复制代码



unto无障碍方式双指向中间滑动放大缩小完整示例nextnocontent
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

相关导读
群发软件本地调试版原生websocket版
本地调试版原生websocket版
群发软件无障碍方式双指向中间滑动放大缩小完整示例
无障碍方式双指向中间滑动放大缩小完整示例
群发软件AIWROK双指向中间滑动捏合手势完整示例
AIWROK双指向中间滑动捏合手势完整示例
群发软件实战使用桌面控制WebSocket
实战使用桌面控制WebSocket
群发软件WebSocket调试okhttp版
WebSocket调试okhttp版
群发软件快手极速版自动刷视频
快手极速版自动刷视频
群发软件极速视频APP刷金币
极速视频APP刷金币
群发软件语音合成核心模块AIWROK 单文件版
语音合成核心模块AIWROK 单文件版
群发软件AIWROK软件自动文字转语音例子
AIWROK软件自动文字转语音例子
群发软件AIWROK adb.exec() 实用工具库 —— 常用功能直接调用版
AIWROK adb.exec() 实用工具库 —— 常用功能直接调用版
群发软件安卓AIWROK获取包名所有方法汇总
安卓AIWROK获取包名所有方法汇总
群发软件AIWROK软件番茄小说自动阅读刷金币示例
AIWROK软件番茄小说自动阅读刷金币示例
信息发布软件AIWROK软件无碍模式一键删除所有APP版示例
AIWROK软件无碍模式一键删除所有APP版示例
信息发布软件AIWROK软件无碍模式auto模块抖音极速版滑动刷视频
AIWROK软件无碍模式auto模块抖音极速版滑动刷视频
信息发布软件快手极速版自动刷视频无障碍模式
快手极速版自动刷视频无障碍模式
信息发布软件AIWROK软件代理模式一键删除桌面所有APP版示例
AIWROK软件代理模式一键删除桌面所有APP版示例
信息发布软件AIWROK软件自动找图利用agent代理模式删除应用版示例
AIWROK软件自动找图利用agent代理模式删除应用版示例
信息发布软件解析Kimi返回的拖动距离示例
解析Kimi返回的拖动距离示例
信息发布软件自动截图并发送给DEEPSEEK识别示例过程
自动截图并发送给DEEPSEEK识别示例过程
信息发布软件AIWROK软件测试文心识别识别验证码示例
AIWROK软件测试文心识别识别验证码示例
信息发布软件元宝截图B站验证码示例测试
元宝截图B站验证码示例测试
信息发布软件示例千问自动采集文章保存记事本
示例千问自动采集文章保存记事本
信息发布软件豆包识别验证码加拖动验证码示例
豆包识别验证码加拖动验证码示例
信息发布软件豆包对话采集示例
豆包对话采集示例
信息发布软件启动自动百度贴吧发图片
启动自动百度贴吧发图片
信息发布软件自动百度贴吧示例
自动百度贴吧示例
信息发布软件代理模式简书自动流程
代理模式简书自动流程
信息发布软件启动极速版任务页看小说赚钱自动阅读
启动极速版任务页看小说赚钱自动阅读
信息发布软件agent代理模式功能小结
agent代理模式功能小结
信息发布软件完整苹果IOS小脚本文本输入与粘贴流程
完整苹果IOS小脚本文本输入与粘贴流程
信息发布软件AIWROK使用activity列表开关与进度条的协同交互
AIWROK使用activity列表开关与进度条的协同交互
群发软件苹果脚本找图后Detect对象各种方法演示
苹果脚本找图后Detect对象各种方法演示
群发软件苹果脚本网络API监控与数据管理工具
苹果脚本网络API监控与数据管理工具
群发软件IOS苹果脚本TXT文件读写H5日志打印完整示例
IOS苹果脚本TXT文件读写H5日志打印完整示例
群发软件AIWROK软件演示多线程创建暂停恢复
AIWROK软件演示多线程创建暂停恢复
群发软件AIWROK软件定时检查页面状态防止卡死技巧
AIWROK软件定时检查页面状态防止卡死技巧
群发软件安卓脚本runTime相关功能示例
安卓脚本runTime相关功能示例
群发软件floatUI实例秒显示秒关闭吐司功能
floatUI实例秒显示秒关闭吐司功能
群发软件苹果脚本HID多行实例粘帖板示例
苹果脚本HID多行实例粘帖板示例
群发软件安卓脚本HID节点查找完整方法示例
HID节点查找完整方法示例
群发软件AIWROK软件框架的抖音自动化营销系统
AIWROK软件框架的抖音自动化营销系统
群发软件赛博朋克任务控制中心H5示例
赛博朋克任务控制中心H5示例
群发软件苹果脚本现代深色UI设计风格
现代深色UI设计风格
群发软件AIWROK软件智能任务监控悬浮窗
AIWROK软件智能任务监控悬浮窗
群发软件AIWROK软件事件监听示例
AIWROK软件事件监听示例
群发软件QZ掘金原生UI界面
QZ掘金原生UI界面
群发软件安卓脚本auto方法完整示例
安卓脚本auto方法完整示例
群发软件安卓脚本暂停弹出确认对话框
安卓脚本暂停弹出确认对话框
群发软件苹果iOS脚本天气信息查询工具
苹果iOS脚本天气信息查询工具
群发软件安卓脚本简化版H5日志输出窗口
安卓脚本简化版H5日志输出窗口
群发软件安卓脚本简化版H5日志输出窗口
安卓脚本简化版H5日志输出窗口
群发软件安卓脚本应用重置、代理模式监控及补丁升级
安卓脚本应用重置、代理模式监控及补丁升级
群发软件安卓脚本里的打开关闭安装以及卡密授权信息
安卓脚本里的打开关闭安装以及卡密授权信息
群发软件AIWROK软件脚本GET下载文件并检测0KB工具
AIWROK软件脚本GET下载文件并检测0KB工具
群发软件安卓脚本HID按键方法完整示例
安卓脚本HID按键方法完整示例
群发软件AIWROK软件键鼠HID滑动所有方法功能演示
AIWROK软件键鼠HID滑动所有方法功能演示
群发软件苹果脚本里HID的5种滑动方法的使用
苹果脚本里HID的5种滑动方法的使用
群发软件苹果脚本示例7种不同的OCR识别和点击方法
苹果脚本示例7种不同的OCR识别和点击方法
群发软件AIWROK软件安卓脚本FTP上传下载例子
AIWROK软件安卓脚本FTP上传下载例子
群发软件AIWROK软件脚本JSON转换示例
AIWROK软件脚本JSON转换示例
群发软件AIWROK软件运算符高级应用实例
AIWROK软件运算符高级应用实例
群发软件JavaScript语法小示例
JavaScript语法小示例
群发软件展示JavaScript各种语句标识符的实际应用
展示JavaScript各种语句标识符的实际应用
群发软件AIWROK条件语句实用示例智能活动推荐系统
AIWROK条件语句实用示例智能活动推荐系统
群发软件AIWROK软件示例数组方法实战应用
AIWROK软件示例数组方法实战应用

QQ|( 京ICP备09078825号 )

本网站信息发布软件,是可以发布论坛,发送信息到各大博客,各大b2b软件自动发布,好不夸张的说:只要手工能发在电脑打开IE能发的网站,用这个宣传软件就可以仿制动作,进行推送发到您想发送的B2B网站或是信息发布平台上,不管是后台,还是前台,都可以进行最方便的广告发布,这个广告发布软件,可以按月购买,还可以试用软件,对网站的验证码也可以完全自动对信息发布,让客户自动找上门,使企业轻松实现b2b发布,这个信息发布软件,均是本站原创正版开发,拥有正版的血统,想要新功能,欢迎提意见给我,一好的分类信息群发软件在手,舍我其谁。QQ896757558

GMT+8, 2026-8-19 07:37 , Processed in 0.176955 second(s), 49 queries .

宣传软件--信息发布软件--b2b软件广告发布软件

快速回复 返回顶部 返回列表