package com.tplink.cloud.demo.websocket_client;
import org.springframework.messaging.converter.MappingJackson2MessageConverter;
import org.springframework.messaging.simp.stomp.StompHeaders;
import org.springframework.messaging.simp.stomp.StompSession;
import org.springframework.messaging.simp.stomp.StompSessionHandler;
import org.springframework.messaging.simp.stomp.StompSessionHandlerAdapter;
import org.springframework.web.socket.client.standard.StandardWebSocketClient;
import org.springframework.web.socket.messaging.WebSocketStompClient;
import org.springframework.web.socket.sockjs.client.SockJsClient;
import org.springframework.web.socket.sockjs.client.Transport;
import org.springframework.web.socket.sockjs.client.WebSocketTransport;
import org.springframework.http.*;
import org.springframework.web.client.RestTemplate;
import javax.websocket.ContainerProvider;
import javax.websocket.WebSocketContainer;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutionException;
/**
Description of this file
@author Li Tailong
@version 1.0
@since 2025/10/27
*/
public class DeviceImportClient {
// HTTP请求的目标URL(根据实际环境修改) private static final String HTTP_ENDPOINT = "http://your-server-domain/api/v2/device/import"; // WebSocket连接地址(根据实际环境修改) private static final String WEBSOCKET_URL = "ws://your-server-domain/ws-endpoint"; public static void main(String[] args) throws Exception { // 1. 配置WebSocket客户端(包含256KB缓冲区) WebSocketContainer container = ContainerProvider.getWebSocketContainer(); container.setDefaultMaxTextMessageBufferSize(262144); container.setDefaultMaxBinaryMessageBufferSize(262144); Transport webSocketTransport = new WebSocketTransport(new StandardWebSocketClient(container)); List<Transport> transports = new ArrayList<>(); transports.add(webSocketTransport); SockJsClient sockJsClient = new SockJsClient(transports); WebSocketStompClient stompClient = new WebSocketStompClient(sockJsClient); stompClient.setMessageConverter(new MappingJackson2MessageConverter()); // 2. 创建STOMP会话处理器 StompSessionHandler sessionHandler = new StompSessionHandlerAdapter() { @Override public void afterConnected(StompSession session, StompHeaders connectedHeaders) { System.out.println("WebSocket连接成功!会话ID: " + session.getSessionId()); // 订阅目标主题(根据实际需求修改) session.subscribe("/topic/device-import-status", this); System.out.println("已订阅设备导入状态主题"); } @Override public void handleFrame(StompHeaders headers, Object payload) { if (payload != null) { System.out.println("收到订阅消息: " + payload.toString()); } } }; // 3. 连接WebSocket服务器 try { StompSession stompSession = stompClient.connect(WEBSOCKET_URL, sessionHandler).get(); System.out.println("WebSocket连接建立完成,准备发送HTTP请求..."); // 4. 发送HTTP POST请求 sendDeviceImportRequest(); // 保持连接以接收订阅消息(根据需要调整等待时间) Thread.sleep(60000); // 等待60秒 stompSession.disconnect(); } catch (InterruptedException | ExecutionException e) { System.err.println("WebSocket连接失败: " + e.getMessage()); } } private static void sendDeviceImportRequest() { // 创建请求对象 DeviceImportRequest request = new DeviceImportRequest(); request.setUsername("admin"); request.setPassword("0pVyQVzuA0cSyS29h7Sn2aqPK7nIAD0EaSu9daKxCx5Sjy6aKkeUbmII5f7Boq/rfGSu8LlzuJcvUV3yNXNjelzQt5iQEXfGJvVeT5DF9/1jP3c9wmC8uJHwELynxM5QLcvj+0FnRpZxzPVFcVq9Qa68u0CzoL5nL7Pt125f6F91yyE06DBEbEkeC0Lmbmcv8lOREiOmxSoMSazi0uiVOMfCjHEli8+YcjjRF7/PJEuchuuro4WuRDpl4fVMvso+F/WZ+W0FI2hP/y90OsZUWgStP591ga9SJYvqlIxHIfjuXhFZlNB8o2QEB9Gvbu2aFntVwyE2283kWcErBUXATw=="); request.setImportId("146a67b7b1350179eac415dc6f2351d5"); request.setNeedInitDevice(false); request.setWhetherRsa(true); // 添加设备列表 List<DeviceInfo> deviceList = new ArrayList<>(); deviceList.add(new DeviceInfo("TP14C3EFF0E1A638F582040")); deviceList.add(new DeviceInfo("TP14C3EFF0E1A62F47C2040")); request.setDeviceList(deviceList); // 配置HTTP请求 RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); HttpEntity<DeviceImportRequest> entity = new HttpEntity<>(request, headers); // 发送请求并处理响应 try { ResponseEntity<String> response = restTemplate.postForEntity( HTTP_ENDPOINT, entity, String.class); System.out.println("HTTP请求发送成功!状态码: " + response.getStatusCode()); System.out.println("响应内容: " + response.getBody()); } catch (Exception e) { System.err.println("HTTP请求发送失败: " + e.getMessage()); } } // 内部类定义请求数据结构 static class DeviceImportRequest { private List<DeviceInfo> deviceList; private String username; private String password; private String importId; private boolean needInitDevice; private boolean whetherRsa; // 所有属性的getter和setter public List<DeviceInfo> getDeviceList() { return deviceList; } public void setDeviceList(List<DeviceInfo> deviceList) { this.deviceList = deviceList; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getImportId() { return importId; } public void setImportId(String importId) { this.importId = importId; } public boolean isNeedInitDevice() { return needInitDevice; } public void setNeedInitDevice(boolean needInitDevice) { this.needInitDevice = needInitDevice; } public boolean isWhetherRsa() { return whetherRsa; } public void setWhetherRsa(boolean whetherRsa) { this.whetherRsa = whetherRsa; } } static class DeviceInfo { private String qrCode; public DeviceInfo(String qrCode) { this.qrCode = qrCode; } public String getQrCode() { return qrCode; } public void setQrCode(String qrCode) { this.qrCode = qrCode; } }
}
基于这个客户端代码,将其deviceList变成:“TP14C3EFF0E1A638F582040”, “TP14C3EFF0E1A62F47C2040”, “TP14C3EFF0E1A6B477D2040”, “TP14C3EFF0E1A6AFEF02040”,
“TP14C3EFF0E1A65C1282040”, “TP14C3EFF0E1A6437D82040”, “TP14C3EFF0E1A67AA172040”, “TP14C3EFF0E1A669FF22040”,
“TP14C3EFF0E1A61B01E2040”, “TP14C3EFF0E1A60E0BB2040”, “TP14C3EFF0E1A696EF22040”, “TP14C3EFF0E1A6CE36E2040”,
“TP14C3EFF0E1A6E33592040”, “TP14C3EFF0E1A6DF2BC2040”, “TP14C3EFF0E1A6898AD2040”, “TP14C3EFF0E1A6F52152040”,
“TP14C3EFF0E1A72699B2040”, “TP14C3EFF0E1A71687A2040”, “TP14C3EFF0E1A73E52E2040”, “TP14C3EFF0E1A7ADB8B2040”,
“TP14C3EFF0E1A7407632040”, “TP14C3EFF0E1A7B9DD62040”, “TP14C3EFF0E1A76343B2040”, “TP14C3EFF0E1A75AC5F2040”,
“TP14C3EFF0E1A70D21F2040”, “TP14C3EFF0E1A77620B2040”, “TP14C3EFF0E1A792E392040”, “TP14C3EFF0E1A78016E2040”,
“TP14C3EFF0E1BE278792040”, “TP14C3EFF0E1BE133D32040”, “TP14C3EFF0E1BE34BA92040”, “TP14C3EFF0E1BEA08EF2040”,
“TP14C3EFF0E1BE4A2DA2040”, “TP14C3EFF0E1BEB0B352040”, “TP14C3EFF0E1BE613FF2040”, “TP14C3EFF0E1BE5023D2040”,
“TP14C3EFF0E1BE0F3082040”, “TP14C3EFF0E1BE7319A2040”, “TP14C3EFF0E1BE9C4192040”, “TP14C3EFF0E1BE8A4DA2040”,
“TP14C3EFF0E1BED0C332040”, “TP14C3EFF0E1BECB3272040”, “TP14C3EFF0E1BEF05EA2040”, “TP14C3EFF0E1BEEEB102040”,
“TP14C3EFF0E1BF186642040”, “TP14C3EFF0E1BF056F12040”, “TP14C3EFF0E1BF310D02040”, “TP14C3EFF0E1BF20B912040”,
“TP14C3EFF0E1BFBD10E2040”, “TP14C3EFF0E1BFA6D172040”, “TP14C3EFF0E1BF5B3322040”, “TP14C3EFF0E1BF44BC02040”,
“TP14C3EFF0E1BF705962040”, “TP14C3EFF0E1BF6606D2040”, “TP14C3EFF0E1BF861312040”, “TP14C3EFF0E1BFFD5662040”,
“TP14C3EFF0E1BF97C522040”, “TP14C3EFF0E1BFC44192040”, “TP14C3EFF0E1BFEAB402040”, “TP14C3EFF0E1BFD44A52040”,
“TP14C3EFF0E1B9A19872040”, “TP14C3EFF0E1B9DFCEA2040”, “TP14C3EFF0E1B9C4C452040”, “TP14C3EFF0E1B9FB6AD2040”,
“TP14C3EFF0E1B9E94142040”, “TP14C3EFF0E1B99CD7F2040”, “TP14C3EFF0E1B9892B42040”, “TP14C3EFF0E1B1C42BA2040”,
“TP14C3EFF0E1B1D622B2040”, “TP14C3EFF0E1BBAC7812040”, “TP14C3EFF0E1BB43E5B2040”, “TP14C3EFF0E1BBB48D62040”,
“TP14C3EFF0E1BBD066D2040”, “TP14C3EFF0E1BBC1A952040”, “TP14C3EFF0E1BBFF0102040”, “TP14C3EFF0E1BBE25B82040”,
“TP14C3EFF0E1BB9E99E2040”, “TP14C3EFF0E1BB85B8C2040”, “TP14C3EFF0E1B8505532040”, “TP14C3EFF0E1B84E1362040”,
“TP14C3EFF0E1B871B422040”, “TP14C3EFF0E1B8605C32040”, “TP14C3EFF0E1B8175782040”, “TP14C3EFF0E1B80F12F2040”,
“TP14C3EFF0E1B8320C12040”, “TP14C3EFF0E1B82E1EC2040”, “TP14C3EFF0E1B8B4FAC2040”, “TP14C3EFF0E1B8A1C942040”,
“TP14C3EFF0E1B8CC1B42040”, “TP14C3EFF0E1B8E8AA42040”, “TP14C3EFF0E1B8DEE662040”, “TP14C3EFF0E1B8879D02040”,
“TP14C3EFF0E1B8F6C9C2040”, “TP14C3EFF0E1B89B3C82040”, “TP14C3EFF0E1B9366462040”, “TP14C3EFF0E1B945C3B2040”,
“TP14C3EFF0E1B9B9FBE2040”, “TP14C3EFF0E1B96160F2040”, “TP14C3EFF0E1B952BE02040”, “TP14C3EFF0E1B9009322040”,
“TP14C3EFF0E1B97469B2040”, “TP14C3EFF0E1B92E0602040”, “TP14C3EFF0E1B91BF7E2040”, “TP14C3EFF0E1BDAAFA42040”,
“TP14C3EFF0E1BD4CBD82040”, “TP14C3EFF0E1BDB652E2040”, “TP14C3EFF0E1BD6D1E92040”, “TP14C3EFF0E1A5D9FB12040”,
“TP14C3EFF0E1BD58D462040”, “TP14C3EFF0E1A5C9CA52040”, “TP14C3EFF0E1BDF2B6C2040”, “TP14C3EFF0E1A27A74B2040”,
“TP14C3EFF0E1BDE59202040”, “TP14C3EFF0E1A26816C2040”, “TP14C3EFF0E1BD9AD8A2040”, “TP14C3EFF0E1A21C7392040”,
“TP14C3EFF0E1BD8E3A52040”, “TP14C3EFF0E1A209BC32040”, “TP14C3EFF0E1A2337F12040”, “TP14C3EFF0E1A227C1A2040”,
“TP14C3EFF0E1BDD8DC02040”, “TP14C3EFF0E1BDC723E2040”, “TP14C3EFF0E1BA79A162040”, “TP14C3EFF0E1BA6ED472040”,
“TP14C3EFF0E1BA187232040”, “TP14C3EFF0E1BA053972040”, “TP14C3EFF0E1BA36CC52040”, “TP14C3EFF0E1BA2072B2040”,
“TP14C3EFF0E1BAB5FEB2040”, “TP14C3EFF0E1BAADBE52040”, “TP14C3EFF0E1BA52C812040”, “TP14C3EFF0E1BA473B72040”,
“TP14C3EFF0E1BAEC1DB2040”, “TP14C3EFF0E1BAD26E72040”, “TP14C3EFF0E1BA8776F2040”, “TP14C3EFF0E1BAF73E72040”,
“TP14C3EFF0E1BA9DAEA2040”, “TP14C3EFF0E1BACCEF22040”, “TP14C3EFF0E1BB69E532040”, “TP14C3EFF0E1BB58E762040”,
“TP14C3EFF0E1BB00E992040”, “TP14C3EFF0E1BB7E7C62040”, “TP14C3EFF0E1BB2EFD72040”, “TP14C3EFF0E1BB172E12040”,
“TP14C3EFF0E1BB34E872040”, “TP14C3EFF0E1A7D5DFA2040”, “TP14C3EFF0E1A7C04142040”, “TP14C3EFF0E1A7F0EE62040”,
“TP14C3EFF0E1A7E30402040”, “TP14C3EFF0E1A41BC4D2040”, “TP14C3EFF0E1A40CE712040”, “TP14C3EFF0E1A438B152040”,
“TP14C3EFF0E1A42D1612040”, “TP14C3EFF0E1A4B89712040”, “TP14C3EFF0E1A4A4E542040”, “TP14C3EFF0E1A45A8492040”,
“TP14C3EFF0E1A44AAE42040”, “TP14C3EFF0E1A475DBC2040”, “TP14C3EFF0E1A464A042040”, “TP14C3EFF0E1BC1A80C2040”,
“TP14C3EFF0E1A4832F12040”, “TP14C3EFF0E1BC0BABE2040”, “TP14C3EFF0E1A4F78132040”, “TP14C3EFF0E1BC3BD3E2040”,
“TP14C3EFF0E1BC2A2832040”, “TP14C3EFF0E1A49E4022040”, “TP14C3EFF0E1BCB79282040”, “TP14C3EFF0E1BCAC7072040”,
“TP14C3EFF0E1BC5DF1C2040”, “TP14C3EFF0E1A4CDD4C2040”, “TP14C3EFF0E1BC40FB52040”, “TP14C3EFF0E1BC7CF832040”,
“TP14C3EFF0E1A4EB2712040”, “TP14C3EFF0E1BC648DC2040”, “TP14C3EFF0E1A4D08262040”, “TP14C3EFF0E1BC8699D2040”,
“TP14C3EFF0E1A50AEA82040”, “TP14C3EFF0E1BCF1F0E2040”, “TP14C3EFF0E1A57F7862040”, “TP14C3EFF0E1A525BA42040”,
“TP14C3EFF0E1BC9CD8C2040”, “TP14C3EFF0E1A517A292040”, “TP14C3EFF0E1A5322682040”, “TP14C3EFF0E1A5A83BC2040”,
“TP14C3EFF0E1BCCEE7E2040”, “TP14C3EFF0E1A5436512040”, “TP14C3EFF0E1A5BFE3D2040”, “TP14C3EFF0E1BCEA8142040”,
“TP14C3EFF0E1A564A4C2040”, “TP14C3EFF0E1BCDAAB42040”, “TP14C3EFF0E1A5539AF2040”, “TP14C3EFF0E1BD093C22040”,
“TP14C3EFF0E1A5F12202040”, “TP14C3EFF0E1BD7592C2040”, “TP14C3EFF0E1A5E39702040”, “TP14C3EFF0E1BD2C15C2040”,
“TP14C3EFF0E1A5955402040”, “TP14C3EFF0E1BD142BD2040”, “TP14C3EFF0E1A58F8E02040”, “TP14C3EFF0E1BD3FAE82040”