B2BÍøÂçÈí¼þ

 ÕÒ»ØÃÜÂë
 Á¢¼´×¢²á ÉóºËÍøÕ¾ºÅ:QQ:896757558
ËÑË÷
²é¿´: 14|»Ø¸´: 0
´òÓ¡ ÉÏÒ»Ö÷Ìâ ÏÂÒ»Ö÷Ìâ

WebSocketµ÷ÊÔokhttp°æ

[¸´ÖÆÁ´½Ó]

1154

Ö÷Ìâ

1159

Ìû×Ó

7893

»ý·Ö

abc

Rank: 9Rank: 9Rank: 9

»ý·Ö
7893
Ìø×ªµ½Ö¸¶¨Â¥²ã
Â¥Ö÷
WebSocketµ÷ÊÔokhttp°æ


WebSocketµ÷ÊÔokhttp°æ B2BÍøÂçÈí¼þ

  1. /**
  2. * WebSocket ÆÁÄ»½ØÍ¼´«Êä - ±¾µØµ÷Ê԰棨okhttp3 °æ£©
  3. *
  4. * ÅäÌ× WebSocket²âÊÔ·þÎñÆ÷.py ʹÓÃ
  5. *
  6. * ʹÓ÷½·¨£º
  7. *   
  8. *    È·ÈÏÏÂÃæ serverUrl ÀïµÄ IP ÊÇ PC µÄ¾ÖÓòÍø IP
  9. *  ÊÖ»úºÍ PC ÔÚͬһ WiFi ¾ÖÓòÍø
  10. *  AIWROK ÀïÔËÐб¾½Å±¾
  11. *
  12. * ±¾´ÎʹÓà okhttp3 µÄ WebSocketListener£¨·Ç AIWROK Ô­Éú websocket ¶ÔÏó£©
  13. * ÒÑÔÚ AIWROK v3.7.81 ʵ¼ÊÅÜͨ
  14. */

  15. // ========== µ¼Èë okhttp3£¨AIWROK ×Ô´øÕâЩ Java Àࣩ ==========
  16. importClass(Packages.okhttp3.OkHttpClient);
  17. importClass(Packages.okhttp3.Request);
  18. importClass(Packages.okhttp3.WebSocketListener);
  19. importClass(Packages.java.util.concurrent.TimeUnit);



  20. print.log("===== WebSocket ÆÁÄ»½ØÍ¼´«Ê䣨okhttp3 °æ£©¿ªÊ¼ =====");

  21. // ========== ÅäÖÃ ==========
  22. var config = {
  23.     serverUrl: "192.168.10.107:8886",   // ¡û ¸Ä³É PC ¾ÖÓòÍø IP:¶Ë¿Ú
  24.     screenshotInterval: 5000,            // ½ØÍ¼¼ä¸ô£¨ºÁÃ룩
  25.     reconnectInterval: 2500,              // ¶ÏÏßÖØÊÔ¼ä¸ô£¨ºÁÃ룩
  26.     maxReconnectAttempts: 12,             // ×î¶àÖØÊÔ´ÎÊý
  27.     connectTimeoutSec: 15,                // ÎÕÊÖ³¬Ê±£¨Ã룩
  28.     readTimeoutSec: 30,                   // ¶Á³¬Ê±£¨Ã룩
  29.     runDuration: 30000                    // ½Å±¾×ÜÔËÐÐʱ³¤£¨ºÁÃ룩
  30. };

  31. // ========== È«¾Ö״̬ ==========
  32. var okHttpClient = null;     // OkHttpClient
  33. var webSocket = null;        // µ±Ç° WebSocket ¶ÔÏó
  34. var timer = null;            // ¶¨Ê±Æ÷
  35. var state = {
  36.     connected: false,        // ÊÇ·ñÒÑÁ¬½Ó
  37.     err: null,              // ×î½ü´íÎó
  38.     closeReason: null,      // ¹Ø±ÕÔ­Òò
  39.     reconnectCount: 0,       // ÒÑÖØÁ¬´ÎÊý
  40.     saveDir: "",            // ÓÉ·þÎñÆ÷ WELCOME ´ø³ö
  41.     saveUrlPrefix: "",      // file:/// ǰ׺
  42.     totalSent: 0,           // Òѳ¢ÊÔ·¢Ë͵ÄͼƬÊý
  43.     totalConfirmed: 0       // ·þÎñÆ÷È·ÈÏÊÕµ½µÄͼƬÊý
  44. };

  45. // ========== ¹¤¾ß£º½âÎö·þÎñÆ÷½á¹¹»¯ÏûÏ¢ ==========
  46. function parseServerMessage(rawStr) {
  47.     if (typeof rawStr !== "string") { try { rawStr = String(rawStr); } catch (e) { rawStr = "" + rawStr; } }
  48.     var result = { type: "UNKNOWN", raw: rawStr };
  49.     if (rawStr.indexOf("WELCOME|") === 0) {
  50.         result.type = "WELCOME";
  51.         var parts = rawStr.split("|");
  52.         result.id = parts[1] || "";
  53.         for (var i = 2; i < parts.length; i++) {
  54.             var idx = parts[i].indexOf("=");
  55.             if (idx > 0) result[parts[i].substring(0, idx)] = parts[i].substring(idx + 1);
  56.         }
  57.     } else if (rawStr.indexOf("IMG_SAVED|") === 0) {
  58.         result.type = "IMG_SAVED";
  59.         var p = rawStr.split("|");
  60.         result.seq = p[1] || "";
  61.         result.sizeTxt = p[2] || "";
  62.         result.absPath = p[3] || "";
  63.         result.fileUrl = p[4] || "";
  64.     } else if (rawStr.indexOf("IMG_FAIL|") === 0) {
  65.         result.type = "IMG_FAIL";
  66.     } else if (rawStr.indexOf("ECHO|") === 0) {
  67.         result.type = "ECHO";
  68.         result.text = rawStr.substring("ECHO|".length);
  69.     }
  70.     return result;
  71. }

  72. // ========== ÊÍ·Å×ÊÔ´£¨Ã¿´ÎÖØÁ¬Ç°ÇåÀí¾É client£© ==========
  73. function shutdownClient() {
  74.     if (webSocket) {
  75.         try { webSocket.close(1000, "shutdown"); } catch (e) {}
  76.         webSocket = null;
  77.     }
  78.     if (okHttpClient) {
  79.         try { okHttpClient.dispatcher().executorService().shutdownNow(); } catch (e) {}
  80.         okHttpClient = null;
  81.     }
  82. }

  83. // ========== ½¨Á¢Á¬½Ó£¨okhttp3 ·½°¸£© ==========
  84. function connect() {
  85.     // ÏÈÇå¾É×ÊÔ´
  86.     shutdownClient();

  87.     state.connected = false;
  88.     state.err = null;

  89.     // ¹¹ÔìРOkHttpClient
  90.     okHttpClient = new OkHttpClient.Builder()
  91.         .pingInterval(10, TimeUnit.SECONDS)
  92.         .connectTimeout(config.connectTimeoutSec, TimeUnit.SECONDS)
  93.         .readTimeout(config.readTimeoutSec, TimeUnit.SECONDS)
  94.         .build();

  95.     // ¹¹Ôì listener
  96.     var listener = new WebSocketListener({
  97.         onOpen: function (wsObj, response) {
  98.             state.connected = true;
  99.             state.err = null;
  100.             state.reconnectCount = 0;
  101.             print.log("WS: onOpen");
  102.             printl("✅ Á¬½Ó³É¹¦£¨onOpen£©");
  103.             startScreenshotLoop();
  104.         },
  105.         onMessage: function (wsObj, message) {
  106.             var raw;
  107.             try { raw = String(message); } catch (e) { raw = ""; }
  108.             print.log("WS: onMessage len=" + raw.length);

  109.             var parsed = parseServerMessage(raw);

  110.             if (parsed.type === "WELCOME") {
  111.                 state.saveDir = parsed.save_dir || "";
  112.                 state.saveUrlPrefix = parsed.save_file_url || "";
  113.                 printl("&#128233; WELCOME ¿Í»§¶Ë" + parsed.id);
  114.                 if (state.saveDir) {
  115.                     printl("&#128193; ±£´æÄ¿Â¼: " + state.saveDir);
  116.                     printl("&#128279; Ŀ¼URL: " + state.saveUrlPrefix);
  117.                 }
  118.             } else if (parsed.type === "IMG_SAVED") {
  119.                 state.totalConfirmed++;
  120.                 printl("&#128190; ·þÎñÆ÷Òѱ£´æÍ¼Æ¬ " + parsed.seq);
  121.                 printl("    ´óС: " + parsed.sizeTxt);
  122.                 printl("    ·¾¶: " + parsed.absPath);
  123.                 printl("    &#128279; " + parsed.fileUrl);
  124.             } else if (parsed.type === "IMG_FAIL") {
  125.                 printl("&#128308; ·þÎñÆ÷±£´æÍ¼Æ¬Ê§°Ü: " + parsed.raw);
  126.             } else if (parsed.type === "ECHO") {
  127.                 printl("&#128233; »ØÏÔ: " + parsed.text.substring(0, 150));
  128.             } else {
  129.                 // δ֪¸ñʽ£¨¾É°æ·þÎñÆ÷·µ»Ø£©
  130.                 printl("&#128233; ÊÕµ½: " + raw.substring(0, 200) + (raw.length > 200 ? "..." : ""));
  131.             }
  132.         },
  133.         onClosed: function (wsObj, code, reason) {
  134.             state.connected = false;
  135.             state.closeReason = reason || "closed";
  136.             print.log("WS: onClosed code=" + code + " reason=" + reason);
  137.             printl("&#128268; Á¬½Ó¹Ø±Õ£¨onClosed code=" + code + "£©");
  138.             stopScreenshotLoop();
  139.             scheduleReconnect();
  140.         },
  141.         onFailure: function (wsObj, throwable, response) {
  142.             state.connected = false;
  143.             state.err = (throwable ? String(throwable.getMessage()) : "unknown_failure");
  144.             print.log("WS: onFailure " + state.err);
  145.             printl("❌ Á¬½Ó´íÎó£¨onFailure£©: " + state.err);
  146.             stopScreenshotLoop();
  147.             scheduleReconnect();
  148.         }
  149.     });

  150.     // ·¢ÆðÁ¬½Ó
  151.     var url = "ws://" + config.serverUrl;
  152.     printl("ÕýÔÚÁ¬½Ó: " + url + "£¨" + config.connectTimeoutSec + " Ã볬ʱ£©");

  153.     try {
  154.         var request = new Request.Builder().url(url).build();
  155.         webSocket = okHttpClient.newWebSocket(request, listener);
  156.     } catch (e) {
  157.         state.err = String(e.message);
  158.         printl("❌ newWebSocket Å×Òì³£: " + state.err);
  159.         scheduleReconnect();
  160.     }

  161.     // ͬ²½µÈ×î¶à connectTimeoutSec + 5 Ã뿴ʼþ
  162.     var waited = 0;
  163.     while (!state.connected && !state.err && waited < (config.connectTimeoutSec + 5) * 1000) {
  164.         sleep.millisecond(100);
  165.         waited += 100;
  166.     }
  167.     if (!state.connected && !state.err) {
  168.         state.err = "Á¬½Ó³¬Ê±£¨" + (config.connectTimeoutSec + 5) + " ÃëÄÚÎÞ onOpen/onFailure£©";
  169.         printl("❌ " + state.err);
  170.         scheduleReconnect();
  171.     }
  172. }

  173. // ========== ÖØÁ¬µ÷¶È ==========
  174. function scheduleReconnect() {
  175.     if (state.reconnectCount >= config.maxReconnectAttempts) {
  176.         printl("&#128721; ÒÑ´ïµ½×î´óÖØÁ¬´ÎÊý " + config.maxReconnectAttempts + "£¬Í£Ö¹");
  177.         return;
  178.     }
  179.     state.reconnectCount++;
  180.     printl("⏱️  ÖØÁ¬ " + state.reconnectCount + "/" + config.maxReconnectAttempts + "£¬" + (config.reconnectInterval / 1000).toFixed(1) + " Ãëºó...");

  181.     shutdownClient();

  182.     setTimeout(function () {
  183.         connect();
  184.     }, config.reconnectInterval);
  185. }

  186. // ========== ½ØÒ»ÕÅͼ²¢·¢ËÍ ==========
  187. function sendOne() {
  188.     if (!state.connected || !webSocket) {
  189.         print.log("Ìø¹ý½ØÍ¼£ºÎ´Á¬½Ó");
  190.         return;
  191.     }
  192.     try {
  193.         print.log("½ØÈ¡ÆÁÄ»...");
  194.         printl("&#128248; ½ØÍ¼ÖÐ...");

  195.         var bitmap = screen.screenShotFull();
  196.         if (!bitmap) { printl("❌ ½ØÍ¼Ê§°Ü£¨·µ»Ø null£©"); return; }

  197.         print.log("ת Base64...");
  198.         var base64 = "" + bitmap.toBase64();   // Java ByteString ¡ú JS ×Ö·û´®£¬±ØÐëÓà ""+

  199.         if (!base64) { printl("❌ Base64 Ϊ¿Õ"); return; }

  200.         var chars = base64.length;
  201.         var estKB = Math.round(chars * 0.75 / 1024);
  202.         printl("&#128230; ͼƬ´óС: " + chars + " ×Ö·û£¨Ô¼ " + estKB + " KB£©");

  203.         try { bitmap.recycle(); } catch (e) {}

  204.         state.totalSent++;
  205.         printl("&#128228; ·¢ËÍͼƬ #" + state.totalSent + " ...");
  206.         webSocket.send(base64);

  207.         printl("✅ ͼƬ #" + state.totalSent + " ÒÑͶµÝ£¨" + estKB + " KB£©");

  208.     } catch (e) {
  209.         printl("❌ sendOne Òì³£: " + e.message);
  210.         print.log("sendOne: " + e.message);
  211.     }
  212. }

  213. // ========== ¶¨Ê±½ØÍ¼Ñ­»· ==========
  214. function startScreenshotLoop() {
  215.     if (timer) { try { clearInterval(timer); } catch (e) {} timer = null; }

  216.     print.log("¶¨Ê±½ØÍ¼Ñ­»·Æô¶¯, ¼ä¸ô " + config.screenshotInterval + "ms");
  217.     printl("⏰ ¶¨Ê±½ØÍ¼ÒÑÆô¶¯£¨¼ä¸ô " + (config.screenshotInterval / 1000) + " Ã룩");

  218.     // Ê×ÕÅÁ¢¼´À´
  219.     setTimeout(function () { sendOne(); }, 300);

  220.     timer = setInterval(function () {
  221.         if (state.connected && webSocket) sendOne();
  222.     }, config.screenshotInterval);
  223. }

  224. function stopScreenshotLoop() {
  225.     if (timer) {
  226.         try { clearInterval(timer); } catch (e) {}
  227.         timer = null;
  228.         print.log("Í£Ö¹¶¨Ê±½ØÍ¼Ñ­»·");
  229.     }
  230. }

  231. // ========== ¹Ø±ÕÇåÀí ==========
  232. function cleanup() {
  233.     stopScreenshotLoop();
  234.     shutdownClient();
  235.     state.connected = false;
  236.     printl("&#128268; ×ÊÔ´ÒÑÇåÀí");
  237. }

  238. // ========== Ö÷³ÌÐò ==========
  239. function main() {
  240.     try {
  241.         printl("========================================");
  242.         printl("  WebSocket ÆÁÄ»½ØÍ¼´«Êä - okhttp3 °æ");
  243.         printl("  ·þÎñÆ÷: " + config.serverUrl);
  244.         printl("  ½ØÍ¼¼ä¸ô: " + (config.screenshotInterval / 1000) + " Ãë");
  245.         printl("  ×ÜÔËÐÐ: " + (config.runDuration / 1000) + " Ãë");
  246.         printl("  ×î´óÖØÁ¬: " + config.maxReconnectAttempts + " ´Î");
  247.         printl("========================================");
  248.         printl("ℹ️ ÇëÈ·ÈÏ PC ÒÑÔËÐÐ: python WebSocket²âÊÔ·þÎñÆ÷.py");

  249.         connect();

  250.         print.log("µ¹¼ÆÊ± " + (config.runDuration / 1000) + " Ãë...");
  251.         printl("⏳ ÔËÐÐ " + (config.runDuration / 1000) + " Ãëºó×Ô¶¯½áÊø");
  252.         sleep.millisecond(config.runDuration);

  253.         cleanup();

  254.         printl("");
  255.         printl("===== Ö´ÐнáÊø =====");
  256.         printl("  ³¢ÊÔ·¢ËÍ: " + state.totalSent + " ÕÅ");
  257.         printl("  ·þÎñÆ÷È·ÈÏ: " + state.totalConfirmed + " ÕÅ");
  258.         if (state.saveDir) printl("  PC ±£´æÄ¿Â¼: " + state.saveDir);
  259.         print.log("===== ÆÁÄ»½ØÍ¼´«Êä½áÊø, ·¢ËÍ " + state.totalSent + " ÕÅ =====");

  260.     } catch (e) {
  261.         print.log("Ö÷³ÌÐòÒì³£: " + e.message);
  262.         printl("❌ ³ÌÐò´íÎó: " + e.message);
  263.         try { cleanup(); } catch (e2) {}
  264.     }
  265. }

  266. main();
¸´ÖÆ´úÂë


»Ø¸´

ʹÓõÀ¾ß ¾Ù±¨

¹Ø±Õ

QQ|»ÓªÏúÈí¼þ×ÛºÏÌÖÂÛ|»ÓªÏúÈí¼þÓÐÎʱشð|»ÓªÏúÈí¼þ½Ì³Ì×¨Çø|»ÓªÏúÈí¼þPOST½Å±¾·ÖÏí|»ÓªÏúÈí¼þÆÕͨ½Å±¾·ÖÏí|»ÓªÏúÈí¼þÈí¼þ×ÊѶ|»ÓªÏúÈí¼þ¾«Æ·Èí¼þ|»ÓªÏúÈí¼þ¸üй«¸æ|ÓªÏúÈí¼þ|B2BÈí¼þ|B2BÍøÂçÈí¼þ ( ¾©ICP±¸09078825ºÅ )±¾ÍøÕ¾¿ª·¢µÄÓªÏúÈí¼þÊÇÒ»¿îеÄÍøÂçÓªÏúÈí¼þ£¬Õâ¿îÓªÏú¿ÉÒÔÈ¥ÍøÕ¾Èí¼þ£¬²©¿ÍÈí¼þ£¬B2BÈí¼þ£¬·ÖÀàÐÅÏ¢Íø·¢Ìù£¬¿ÉÒÔÇÀɳ·¢£¬¿ÉÒÔµ½°Ù¶ÈÎÄ¿âÉÏ´«WORDÎĵµ£¬¿ÉÒÔµ½Ò»Ð©ÊÇÏà²áÍøÕ¾×Ô¶¯ÉÏ´«Í¼Æ¬£¬Õâ¸ö×Ô¶¯·¢ÌûÈí¼þ×Ô´øÔÆÖ©Ö룬¼Ó¿ìÊÕ¼£¬ÓÐ6ÖÖ¶Ô½Ó´òÂë½Ó¿Ú£¬·½±ã£¬Ð§Âʸߣ¬Ëٶȿ죬¶øÇÒ¶ÔÍ϶¯µÄÑéÖ¤ÂëÈ«ÍøµÚÒ»¼Ò¶À¼ÒÖ§³Ö£¬È«²¿Ô­´´¼¼Êõ£¬¶À¼ÒÑз¢£¬Õý°æÔ­´´´ø°æÈ¨Èí¼þ¡£Ñ¡ÔñÍòÄÜÓªÏúÈí¼þ£¬¾ÍÑ¡ÔñÁËÒ»ÖÖ׬ǮµÄЧÂÊ£¬´ÓûÓб»³¬Ô½¹ý£¬Ò»Ö±ÔÚŬÁ¦Ñз¢Ð¼¼Êõ¡£·Å·ÉÃÎÏ룬½â·ÅË«ÊÖ£¬À´µã´´Ò⣬³É¾ÍÄãµÄÃÎÏ룬¾ÍÔÚÍòÄÜÓªÏúÈí¼þ¿ªÊ¼

map2

GMT+8, 2026-8-13 09:35 , Processed in 0.098564 second(s), 34 queries .

¿ìËٻظ´ ·µ»Ø¶¥²¿ ·µ»ØÁбí