WebSocket调试工具(html),用于调试WebSocket链接是否畅通

WebSocket调试工具,用于调试WebSocket链接是否畅通

纯html+js编写

直接粘贴使用

html 复制代码
<!DOCTYPE html>
<html lang="zh">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>WebSocket 测试工具</title>
    <style>
      body {
        font-family: Arial, sans-serif;
        max-width: 800px;
        margin: 20px auto;
        padding: 20px;
        background-color: #f7f7f7;
      }
      h1 {
        text-align: center;
        color: #333;
      }
      .form-group {
        margin-bottom: 15px;
      }
      label {
        display: block;
        margin-bottom: 5px;
        font-weight: bold;
      }
      input[type="text"] {
        width: 100%;
        padding: 10px;
        border: 1px solid #ccc;
        border-radius: 4px;
        box-sizing: border-box;
      }
      button {
        background-color: #007cba;
        color: white;
        padding: 10px 15px;
        border: none;
        border-radius: 4px;
        cursor: pointer;
        margin-right: 10px;
      }
      button:hover {
        background-color: #005a87;
      }
      button:disabled {
        background-color: #ccc;
        cursor: not-allowed;
      }
      #status {
        margin: 15px 0;
        font-weight: bold;
      }
      #messages {
        height: 300px;
        overflow-y: auto;
        border: 1px solid #ccc;
        padding: 10px;
        background-color: #fff;
        border-radius: 4px;
        font-family: monospace;
      }
      .log {
        margin: 5px 0;
        color: #333;
      }
      .received {
        color: #007cba;
      }
      .sent {
        color: #28a745;
      }
      .system {
        color: #666;
        font-style: italic;
      }
    </style>
  </head>
  <body>
    <h1>WebSocket 测试工具</h1>

    <div class="form-group">
      <label for="wsUrl">WebSocket 地址:</label>
      <input
        type="text"
        id="wsUrl"
        placeholder="例如: ws://10.10.2.10:85214 或 wss://yourdomain.com/ws"
        value="ws://10.10.60.248:31636/agent/simple-push"
      />
    </div>

    <button id="connectBtn">连接</button>
    <button id="disconnectBtn" disabled>断开</button>

    <div class="form-group">
      <label for="messageInput">发送消息:</label>
      <input
        type="text"
        id="messageInput"
        placeholder="输入要发送的消息"
        disabled
      />
    </div>

    <button id="sendBtn" disabled>发送</button>

    <div id="status">状态: 未连接</div>

    <div id="messages"></div>

    <script>
      let ws = null;
      const wsUrlInput = document.getElementById("wsUrl");
      const messageInput = document.getElementById("messageInput");
      const connectBtn = document.getElementById("connectBtn");
      const disconnectBtn = document.getElementById("disconnectBtn");
      const sendBtn = document.getElementById("sendBtn");
      const statusDiv = document.getElementById("status");
      const messagesDiv = document.getElementById("messages");

      function log(message, type = "system") {
        const el = document.createElement("div");
        el.className = `log ${type}`;
        el.textContent = `[${new Date().toLocaleTimeString()}] ${message}`;
        messagesDiv.appendChild(el);
        messagesDiv.scrollTop = messagesDiv.scrollHeight;
      }

      connectBtn.addEventListener("click", () => {
        const url = wsUrlInput.value.trim();
        if (!url) {
          alert("请输入 WebSocket 地址");
          return;
        }

        try {
          ws = new WebSocket(url);

          ws.onopen = () => {
            log("WebSocket 连接已建立", "system");
            statusDiv.textContent = "状态: 已连接";
            statusDiv.style.color = "green";
            messageInput.disabled = false;
            sendBtn.disabled = false;
            connectBtn.disabled = true;
            disconnectBtn.disabled = false;
          };

          ws.onmessage = (event) => {
            log(`收到: ${event.data}`, "received");
          };

          ws.onclose = (event) => {
            log(`连接已关闭: ${event.code} ${event.reason}`, "system");
            statusDiv.textContent = "状态: 已断开";
            statusDiv.style.color = "red";
            messageInput.disabled = true;
            sendBtn.disabled = true;
            connectBtn.disabled = false;
            disconnectBtn.disabled = true;
            ws = null;
          };

          ws.onerror = (error) => {
            log(`连接错误: ${error}`, "system");
            statusDiv.textContent = "状态: 连接失败";
            statusDiv.style.color = "red";
          };
        } catch (err) {
          log(`连接异常: ${err.message}`, "system");
        }
      });

      disconnectBtn.addEventListener("click", () => {
        if (ws) {
          ws.close();
        }
      });

      sendBtn.addEventListener("click", () => {
        const msg = messageInput.value.trim();
        if (!msg || !ws) return;

        try {
          ws.send(msg);
          log(`发送: ${msg}`, "sent");
          messageInput.value = "";
        } catch (err) {
          log(`发送失败: ${err.message}`, "system");
        }
      });

      // 回车发送
      messageInput.addEventListener("keypress", (e) => {
        if (e.key === "Enter") {
          sendBtn.click();
        }
      });
    </script>
  </body>
</html>
相关推荐
摇滚侠3 小时前
浏览器的打印功能,如果通过HTML5,控制样式
前端·html·html5
24zhgjx-fuhao4 小时前
HTTP的配置
网络·网络协议·http
友莘居士5 小时前
Ganache-CLI以太坊私网JSON-RPC接口执行环境搭建
网络协议·rpc·json·环境搭建·以太坊
安卓开发者5 小时前
第14讲:HTTP网络请求 - Dio库的使用与封装
网络·网络协议·http
L.EscaRC6 小时前
【复习408】TCP运输层核心机制
网络协议·tcp/ip
程序猿_极客6 小时前
【期末网页设计作业】HTML+CSS+JS 香港旅游网站设计与实现 (附源码)
javascript·css·html
红树林077 小时前
渗透测试之json_web_token(JWT)
网络协议·安全·web安全
北京耐用通信8 小时前
冶金车间“迷雾”重重?耐达讯自动化Profibus转光纤为HMI点亮“透视眼”!
人工智能·物联网·网络协议·网络安全·自动化
北京耐用通信8 小时前
耐达讯自动化Profibus光纤模块:智能仪表的“生命线”,极端环境通信无忧!
人工智能·物联网·网络协议·自动化·信息与通信