B2BÍøÂçÈí¼þ

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

WSSЭÒéʾÀý AIWROK °æwebsocket

[¸´ÖÆÁ´½Ó]

1165

Ö÷Ìâ

1170

Ìû×Ó

7937

»ý·Ö

abc

Rank: 9Rank: 9Rank: 9

»ý·Ö
7937
Ìø×ªµ½Ö¸¶¨Â¥²ã
Â¥Ö÷
WSSЭÒéʾÀý AIWROK °æwebsocket


WSSЭÒéʾÀý AIWROK °æwebsocket B2BÍøÂçÈí¼þ

WSSЭÒéʾÀý AIWROK °æwebsocket B2BÍøÂçÈí¼þ

WSSЭÒéʾÀý AIWROK °æwebsocket B2BÍøÂçÈí¼þ

  1. /**
  2. * WSS ЭÒéʾÀý - AIWROK °æ
  3. *
  4. * ʹÓà AIWROK Ô­Éú websocket ¶ÔÏóʵÏÖ ws:// ºÍ wss://£¨TLS ¼ÓÃÜ£©Á¬½Ó
  5. * Ö§³Ö£ºË«ÏòͨÐÅ¡¢ÐÄÌø±£»î¡¢¶ÏÏßÖØÁ¬¡¢JSON ÏûÏ¢ÊÕ·¢
  6. *
  7. * AIWROK Ô­Éú WebSocket API£º
  8. *   new websocket()           - ´´½¨ÊµÀý
  9. *   ws.setSocketID(String)    - ÉèÖÃΨһID
  10. *   ws.event(onOpen, onMsg, onErr, onClose) - ¹ÒÔØËĸö»Øµ÷
  11. *   ws.connet(String)         - Á¬½Ó·þÎñÆ÷£¨×¢ÒâÊÇË«n£©
  12. *   ws.send(String)           - ·¢ËÍÏûÏ¢
  13. *   ws.close()                - ¹Ø±ÕÁ¬½Ó
  14. *
  15. * ws:// ºÍ wss:// µÄÇø±ð£º
  16. *   wss:// ×ß TLS ¼ÓÃÜͨµÀ£¬Êý¾Ý´«Ê䰲ȫ
  17. *   AIWROK µÄ websocket ¶ÔÏó»á×Ô¶¯´¦Àí TLS ÎÕÊÖ
  18. *
  19. * ÒÀÀµ£ºAIWROK Ô­Éú websocket ¶ÔÏó£¬ÁãÒÀÀµ
  20. *
  21. * ʹÓ÷½·¨£º
  22. *   1. ÐÞ¸Ä CFG.serverUrl ΪÄãµÄ wss:// µØÖ·
  23. *   2. AIWROK ÖÐÖ±½ÓÔËÐб¾½Å±¾
  24. *   3. ÈÕÖ¾´°¿Ú²é¿´Á¬½Ó״̬ºÍÊÕ·¢ÏûÏ¢
  25. */

  26. // ========== ÅäÖÃ ==========
  27. var CFG = {
  28.     // WSS ·þÎñÆ÷µØÖ·£¨TLS ¼ÓÃÜ£©
  29.     // wss:// ×ß¼ÓÃÜͨµÀ£¬ws:// ×ßÃ÷ÎÄͨµÀ
  30.     serverUrl: "wss://echo.websocket.org/ws",

  31.     // ÐÄÌø¼ä¸ô£¨Ã룩£¬¶¨Ê±·¢ PING ±£³ÖÁ¬½Ó
  32.     heartbeatIntervalSec: 15,

  33.     // ÖØÁ¬ÅäÖÃ
  34.     reconnectIntervalMs: 3000,      // ÖØÁ¬»ù´¡¼ä¸ô£¨ºÁÃ룩
  35.     maxReconnectAttempts: 999,      // ×î´óÖØÁ¬´ÎÊý£¨999=ÎÞÏÞ£©
  36.     reconnectMultiplier: 1.5,        // Ö¸ÊýÍ˱ܱ¶Êý
  37.     maxReconnectDelayMs: 30000,     // ×î´óÖØÁ¬ÑÓ³Ù£¨ºÁÃ룩

  38.     // µ÷ÊÔÈÕÖ¾
  39.     debug: true,

  40.     // ½Å±¾ÔËÐÐʱ³¤£¨ºÁÃ룩£¬0=ÎÞÏÞ
  41.     runDuration: 0
  42. };

  43. // ========== È«¾Ö״̬ ==========
  44. var G = {
  45.     ws: null,                      // websocket ʵÀý
  46.     connected: false,              // ÊÇ·ñÒÑÁ¬½Ó
  47.     reconnectCount: 0,             // ÒÑÖØÁ¬´ÎÊý
  48.     currentDelay: CFG.reconnectIntervalMs,  // µ±Ç°ÖØÁ¬ÑÓ³Ù
  49.     running: true,                 // ÔËÐбêÖ¾
  50.     startTime: 0,                  // Æô¶¯Ê±¼ä
  51.     msgSentCount: 0,               // ÒÑ·¢ËÍÏûÏ¢Êý
  52.     msgRecvCount: 0,               // ÒѽÓÊÕÏûÏ¢Êý
  53.     lastPongAt: 0,                 // ÉÏ´ÎÊÕµ½PONGʱ¼ä
  54.     heartbeatTimer: null           // ÐÄÌø¶¨Ê±Æ÷
  55. };

  56. // ========== ʱ¼ä¹¤¾ß ==========
  57. function nowMs() {
  58.     return (new Date()).getTime();
  59. }
  60. function nowSec() {
  61.     return Math.floor(nowMs() / 1000);
  62. }

  63. // ========== É豸ÐÅÏ¢ ==========
  64. function getDeviceInfo() {
  65.     var info = { imei: "", brand: "", model: "", screen: "" };
  66.     try { info.imei = device.getIMEI() || ""; } catch (e) {}
  67.     try { info.brand = device.getBrand() || ""; } catch (e) {}
  68.     try { info.model = device.getModel() || ""; } catch (e) {}
  69.     try { info.screen = screen.getScreenWidth() + "x" + screen.getScreenHeight(); } catch (e) {}
  70.     return info;
  71. }

  72. // ========== ÏûÏ¢·¢ËÍ ==========
  73. function sendMsg(data) {
  74.     if (!G.connected || !G.ws) {
  75.         printl("[WARN] δÁ¬½Ó£¬ÎÞ·¨·¢ËÍ");
  76.         return false;
  77.     }
  78.     try {
  79.         var raw;
  80.         if (typeof data === "string") {
  81.             raw = data;
  82.         } else {
  83.             raw = JSON.stringify(data);
  84.         }
  85.         G.ws.send(raw);
  86.         G.msgSentCount++;
  87.         printl("[SEND] " + raw.slice(0, 200));
  88.         return true;
  89.     } catch (e) {
  90.         printl("[ERROR] " + "·¢ËÍÒì³£: " + e.message);
  91.         return false;
  92.     }
  93. }

  94. // ========== ´¦ÀíÊÕµ½µÄÏûÏ¢ ==========
  95. function handleMessage(raw) {
  96.     G.msgRecvCount++;
  97.     printl("[RECV] " + raw.slice(0, 200));

  98.     var obj = null;
  99.     try {
  100.         obj = JSON.parse(raw);
  101.     } catch (e) {
  102.         printl("[DEBUG] " + "·Ç JSON ÏûÏ¢: " + raw.slice(0, 100));
  103.         return;
  104.     }

  105.     // ¸ù¾ÝÏûÏ¢ÀàÐÍ´¦ÀíÒµÎñÂß¼­
  106.     if (obj.type === "WELCOME") {
  107.         printl("[INFO] " + "·þÎñÆ÷»¶Ó­: " + (obj.msg || ""));
  108.     } else if (obj.type === "PING" || obj.type === "ping") {
  109.         // ·þÎñ¶ËÐÄÌø£¬»Ø PONG
  110.         G.lastPongAt = nowMs();
  111.         sendMsg({ type: "PONG", ts: nowSec() });
  112.     } else if (obj.type === "PONG" || obj.type === "pong") {
  113.         // ÊÕµ½ PONG£¬¸üÐÂÐÄÌøÊ±¼ä
  114.         G.lastPongAt = nowMs();
  115.         printl("[DEBUG] ÊÕµ½ PONG");
  116.     } else if (obj.type === "CMD_SCREENSHOT") {
  117.         handleScreenshotCmd(obj);
  118.     } else if (obj.type === "CMD_CLICK") {
  119.         handleClickCmd(obj);
  120.     } else if (obj.type === "CMD_STATUS") {
  121.         handleStatusCmd(obj);
  122.     } else {
  123.         printl("[DEBUG] " + "δ´¦ÀíµÄÏûÏ¢ÀàÐÍ: " + obj.type);
  124.     }
  125. }

  126. // ========== ÒµÎñÖ¸Á½ØÍ¼ ==========
  127. function handleScreenshotCmd(obj) {
  128.     try {
  129.         var bitmap = screen.screenShotFull();
  130.         if (!bitmap) {
  131.             sendMsg({ type: "CMD_RESP", cmd: "CMD_SCREENSHOT", ok: false, msg: "½ØÍ¼·µ»Ø¿Õ" });
  132.             return;
  133.         }
  134.         var base64 = "" + bitmap.toBase64();
  135.         try { bitmap.recycle(); } catch (e) {}
  136.         sendMsg({
  137.             type: "CMD_RESP",
  138.             cmd: "CMD_SCREENSHOT",
  139.             ok: true,
  140.             cmdId: obj.cmdId,
  141.             data: { base64: base64, length: base64.length }
  142.         });
  143.     } catch (e) {
  144.         sendMsg({ type: "CMD_RESP", cmd: "CMD_SCREENSHOT", ok: false, msg: e.message });
  145.     }
  146. }

  147. // ========== ÒµÎñÖ¸Áµã»÷ ==========
  148. function handleClickCmd(obj) {
  149.     try {
  150.         var x = parseInt(obj.data.x, 10);
  151.         var y = parseInt(obj.data.y, 10);
  152.         if (isNaN(x) || isNaN(y)) {
  153.             sendMsg({ type: "CMD_RESP", cmd: "CMD_CLICK", ok: false, msg: "×ø±êÎÞЧ" });
  154.             return;
  155.         }
  156.         if (typeof action !== "undefined") {
  157.             action.click(x, y);
  158.         } else if (typeof hid !== "undefined") {
  159.             hid.click(x, y);
  160.         }
  161.         sendMsg({ type: "CMD_RESP", cmd: "CMD_CLICK", ok: true, cmdId: obj.cmdId });
  162.     } catch (e) {
  163.         sendMsg({ type: "CMD_RESP", cmd: "CMD_CLICK", ok: false, msg: e.message });
  164.     }
  165. }

  166. // ========== ÒµÎñÖ¸Á״̬²éѯ ==========
  167. function handleStatusCmd(obj) {
  168.     var info = getDeviceInfo();
  169.     info.type = "CMD_RESP";
  170.     info.cmd = "CMD_STATUS";
  171.     info.ok = true;
  172.     info.cmdId = obj.cmdId;
  173.     info.runtimeSec = nowSec() - G.startTime;
  174.     info.msgSentCount = G.msgSentCount;
  175.     info.msgRecvCount = G.msgRecvCount;
  176.     info.reconnectCount = G.reconnectCount;
  177.     sendMsg(info);
  178. }

  179. // ========== ÐÄÌø¶¨Ê±Æ÷ ==========
  180. function startHeartbeat() {
  181.     stopHeartbeat();
  182.     var hbMs = CFG.heartbeatIntervalSec * 1000;
  183.     try {
  184.         G.heartbeatTimer = setTimeout(function tick() {
  185.             try {
  186.                 if (!G.running || !G.connected) return;
  187.                 // ¼ì²éÐÄÌø³¬Ê±
  188.                 if (G.lastPongAt > 0 && (nowMs() - G.lastPongAt) > hbMs + 10000) {
  189.                     printl("[WARN] ÐÄÌø³¬Ê±£¬Ö÷¶¯¶Ï¿ªÖØÁ¬");
  190.                     try { G.ws.close(); } catch (e) {}
  191.                     return;
  192.                 }
  193.                 sendMsg({ type: "PING", ts: nowSec() });
  194.                 G.heartbeatTimer = setTimeout(tick, hbMs);
  195.             } catch (e) {
  196.                 printl("[ERROR] " + "ÐÄÌøÒì³£(ÒѶµ×¡): " + e.message);
  197.                 G.heartbeatTimer = setTimeout(tick, hbMs);
  198.             }
  199.         }, hbMs);
  200.     } catch (e) {
  201.         // setTimeout ²»´æÔÚʱÓà runTime.setTimeout ¶µµ×
  202.         try {
  203.             G.heartbeatTimer = runTime.setTimeout(function tick() {
  204.                 try {
  205.                     if (!G.running || !G.connected) return;
  206.                     if (G.lastPongAt > 0 && (nowMs() - G.lastPongAt) > hbMs + 10000) {
  207.                         printl("[WARN] ÐÄÌø³¬Ê±£¬Ö÷¶¯¶Ï¿ªÖØÁ¬");
  208.                         try { G.ws.close(); } catch (e2) {}
  209.                         return;
  210.                     }
  211.                     sendMsg({ type: "PING", ts: nowSec() });
  212.                     G.heartbeatTimer = runTime.setTimeout(tick, hbMs);
  213.                 } catch (e3) {
  214.                     G.heartbeatTimer = runTime.setTimeout(tick, hbMs);
  215.                 }
  216.             }, hbMs);
  217.         } catch (e4) {}
  218.     }
  219. }

  220. function stopHeartbeat() {
  221.     if (G.heartbeatTimer) {
  222.         try { clearTimeout(G.heartbeatTimer); } catch (e) {}
  223.         try { runTime.stopTimeout(G.heartbeatTimer); } catch (e) {}
  224.         G.heartbeatTimer = null;
  225.     }
  226. }

  227. // ========== WebSocket »Øµ÷º¯Êý ==========

  228. // Á¬½Ó³É¹¦
  229. function wsOnConnected() {
  230.     G.connected = true;
  231.     G.reconnectCount = 0;
  232.     G.currentDelay = CFG.reconnectIntervalMs;
  233.     G.lastPongAt = nowMs();
  234.     printl("[INFO] Á¬½Ó³É¹¦ (onConnected) ¡ª TLS ÎÕÊÖÍê³É");

  235.     // Æô¶¯ÐÄÌø
  236.     startHeartbeat();

  237.     // Á¬½Ó³É¹¦ºó·¢ËÍ×¢²áÏûÏ¢
  238.     var info = getDeviceInfo();
  239.     sendMsg({
  240.         type: "REGISTER",
  241.         device: info,
  242.         ts: nowSec()
  243.     });
  244. }

  245. // ÊÕµ½Îı¾ÏûÏ¢
  246. function wsOnTextMessage(msg) {
  247.     var raw;
  248.     try { raw = String(msg); } catch (e) { raw = "" + msg; }
  249.     handleMessage(raw);
  250. }

  251. // Á¬½Ó´íÎó
  252. function wsOnConnectError(err) {
  253.     G.connected = false;
  254.     var errMsg = "unknown";
  255.     try { errMsg = String(err); } catch (e) {}
  256.     if (!errMsg || errMsg === "null" || errMsg === "undefined") {
  257.         errMsg = "Á¬½Ó´íÎó(ÎÞÏêϸÐÅÏ¢)";
  258.     }
  259.     printl("[ERROR] " + "Á¬½Ó´íÎó (onConnectError): " + errMsg);
  260.     stopHeartbeat();
  261.     scheduleReconnect();
  262. }

  263. // Á¬½Ó¶Ï¿ª
  264. function wsOnDisconnected() {
  265.     G.connected = false;
  266.     printl("[WARN] Á¬½Ó¶Ï¿ª (onDisconnected)");
  267.     stopHeartbeat();
  268.     scheduleReconnect();
  269. }

  270. // ========== ½¨Á¢Á¬½Ó ==========
  271. function connect() {
  272.     // ÏÈÇåÀí¾ÉÁ¬½Ó
  273.     if (G.ws) {
  274.         try { G.ws.close(); } catch (e) {}
  275.         G.ws = null;
  276.     }
  277.     G.connected = false;

  278.     printl("[INFO] ÕýÔÚÁ¬½Ó: " + CFG.serverUrl + "  (ÖØÁ¬ " + G.reconnectCount + "/" + CFG.maxReconnectAttempts + ")");

  279.     // ´´½¨ AIWROK Ô­Éú websocket ʵÀý
  280.     var ws = null;
  281.     try {
  282.         ws = new websocket();
  283.     } catch (e) {
  284.         printl("[ERROR] " + "new websocket() ʧ°Ü: " + e.message);
  285.         scheduleReconnect();
  286.         return;
  287.     }

  288.     G.ws = ws;

  289.     // ÉèÖà SocketID£¨Î¨Ò»±êʶ£©
  290.     try {
  291.         ws.setSocketID("aiwrok_" + nowMs());
  292.     } catch (e) {
  293.         printl("[DEBUG] " + "setSocketID ʧ°Ü(·ÇÖÂÃü): " + e.message);
  294.     }

  295.     // ¹ÒÔØ»Øµ÷ʼþ
  296.     var eventOk = false;
  297.     try {
  298.         ws.event(wsOnConnected, wsOnTextMessage, wsOnConnectError, wsOnDisconnected);
  299.         eventOk = true;
  300.         printl("[DEBUG] ws.event() ¹Òʼþ³É¹¦");
  301.     } catch (e1) {
  302.         printl("[WARN] ws.event() ʧ°Ü: " + e1.message + " ¡ª ³¢ÊÔÊôÐÔ¸³Öµ");
  303.     }

  304.     // Èç¹û event() ²»ÐУ¬ÓÃÊôÐÔ¸³Öµ¶µµ×
  305.     if (!eventOk) {
  306.         try {
  307.             ws.onConnected = wsOnConnected;
  308.             ws.onTextMessage = wsOnTextMessage;
  309.             ws.onConnectError = wsOnConnectError;
  310.             ws.onDisconnected = wsOnDisconnected;
  311.             printl("[DEBUG] ÊôÐÔ¸³Öµ¹Òʼþ³É¹¦");
  312.         } catch (e2) {
  313.             printl("[ERROR] " + "Á½ÖÖ¹Òʼþ·½Ê½¶¼Ê§°Ü: " + e2.message);
  314.             scheduleReconnect();
  315.             return;
  316.         }
  317.     }

  318.     // ·¢ÆðÁ¬½Ó£¨×¢Òâ: connet Ë«n£©
  319.     try {
  320.         ws.connet(CFG.serverUrl);
  321.         printl("[DEBUG] connet() Òѵ÷ÓÃ");
  322.     } catch (e3) {
  323.         printl("[WARN] connet() Òì³£: " + e3.message + " ¡ª ³¢ÊÔ connect()");
  324.         try {
  325.             ws.connect(CFG.serverUrl);
  326.         } catch (e4) {
  327.             printl("[ERROR] " + "connect() Ҳʧ°Ü: " + e4.message);
  328.             scheduleReconnect();
  329.         }
  330.     }
  331. }

  332. // ========== ÖØÁ¬µ÷¶È ==========
  333. function scheduleReconnect() {
  334.     if (!G.running) return;
  335.     if (G.reconnectCount >= CFG.maxReconnectAttempts) {
  336.         printl("[ERROR] ÒÑ´ï×î´óÖØÁ¬´ÎÊý " + CFG.maxReconnectAttempts + "£¬Í£Ö¹");
  337.         return;
  338.     }

  339.     G.reconnectCount++;

  340.     // Ö¸ÊýÍ豆 + Ëæ»ú¶¶¶¯
  341.     G.currentDelay = Math.min(
  342.         G.currentDelay * CFG.reconnectMultiplier,
  343.         CFG.maxReconnectDelayMs
  344.     );
  345.     var jitter = Math.floor(G.currentDelay * (0.8 + Math.random() * 0.4));

  346.     printl("[INFO] ÖØÁ¬ " + G.reconnectCount + "/" + CFG.maxReconnectAttempts +
  347.         " ¡ª " + (jitter / 1000).toFixed(1) + "s ºóÖØÊÔ");

  348.     try {
  349.         setTimeout(function () {
  350.             if (G.running) {
  351.                 try { connect(); } catch (e) {
  352.                     printl("[ERROR] " + "ÖØÁ¬»Øµ÷Òì³£(ÒѶµ×¡): " + e.message);
  353.                     scheduleReconnect();
  354.                 }
  355.             }
  356.         }, jitter);
  357.     } catch (e) {
  358.         try {
  359.             runTime.setTimeout(function () {
  360.                 if (G.running) {
  361.                     try { connect(); } catch (e2) {
  362.                         printl("[ERROR] " + "ÖØÁ¬»Øµ÷Òì³£(ÒѶµ×¡): " + e2.message);
  363.                         scheduleReconnect();
  364.                     }
  365.                 }
  366.             }, jitter);
  367.         } catch (e3) {}
  368.     }
  369. }

  370. // ========== ¹Ø±ÕÇåÀí ==========
  371. function cleanup() {
  372.     G.running = false;
  373.     stopHeartbeat();
  374.     if (G.ws) {
  375.         try { G.ws.close(); } catch (e) {}
  376.         G.ws = null;
  377.     }
  378.     G.connected = false;
  379.     printl("[INFO] ×ÊÔ´ÒÑÇåÀí");
  380. }

  381. // ========== Ö÷³ÌÐò ==========
  382. function main() {
  383.     try {
  384.         G.startTime = nowSec();

  385.         printl("[INFO] ==========================================");
  386.         printl("[INFO]   WSS WebSocket ¿Í»§¶Ë (AIWROKÔ­Éú) Æô¶¯");
  387.         printl("[INFO] " + "  ·þÎñÆ÷: " + CFG.serverUrl);
  388.         printl("[INFO]   ÐÄÌø¼ä¸ô: " + CFG.heartbeatIntervalSec + "s");
  389.         printl("[INFO]   ×î´óÖØÁ¬: " + CFG.maxReconnectAttempts + " ´Î");
  390.         printl("[INFO] " + "  É豸ÐÅÏ¢: " + JSON.stringify(getDeviceInfo()));
  391.         printl("[INFO] ==========================================");

  392.         // ·¢ÆðÊ×´ÎÁ¬½Ó
  393.         connect();

  394.         // Ö÷Ï̱߳£»î£¨Á´Ê½ setTimeout£¬·Ç×èÈû£©
  395.         var tick = 0;
  396.         (function keepAlive() {
  397.             try {
  398.                 if (!G.running) {
  399.                     printl("[INFO] Ö÷Ï̱߳£»îÍ˳ö");
  400.                     return;
  401.                 }
  402.                 tick++;
  403.                 // ÿ 20 Ãë´òÓ¡Ò»´Î״̬
  404.                 if (tick % 20 === 0) {
  405.                     printl("[INFO] " + "[±£»î] ÒÑÔËÐÐ=" + (nowSec() - G.startTime) +
  406.                         "s Á¬½Ó=" + G.connected +
  407.                         " ·¢ËÍ=" + G.msgSentCount +
  408.                         " ½ÓÊÕ=" + G.msgRecvCount +
  409.                         " ÖØÁ¬=" + G.reconnectCount);
  410.                 }
  411.             } catch (e) {
  412.                 printl("[ERROR] " + "±£»îÒì³£(ÒѶµ×¡): " + e.message);
  413.             }
  414.             try { setTimeout(keepAlive, 1000); }
  415.             catch (e) {
  416.                 try { runTime.setTimeout(keepAlive, 1000); } catch (e2) {}
  417.             }
  418.         })();

  419.         // Èç¹ûÉèÖÃÁËÔËÐÐʱ³¤£¬µ½Ê±×Ô¶¯Í˳ö
  420.         if (CFG.runDuration > 0) {
  421.             sleep.millisecond(CFG.runDuration);
  422.             cleanup();
  423.         }
  424.         // ·ñÔòÎÞÏÞÔËÐУ¨¿¿±£»îÑ­»·Î¬³Ö£©

  425.     } catch (e) {
  426.         printl("[FATAL] " + "Ö÷³ÌÐòÒì³£: " + e.message + "\n" + (e.stack || ""));
  427.         try { cleanup(); } catch (e2) {}
  428.     }
  429. }

  430. // ========== Æô¶¯ ==========
  431. main();
¸´ÖÆ´úÂë


»Ø¸´

ʹÓõÀ¾ß ¾Ù±¨

±¾°æ»ý·Ö¹æÔò

¹Ø±Õ

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

map2

GMT+8, 2026-9-1 01:31 , Processed in 0.103228 second(s), 35 queries .

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