当前位置: 首页 > ai >正文

通过IDEA写一个服务端和一个客户端之间的交互

服务端代码:

WebSocketConfig代码

package org.example.hufamessagedemo;import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.*;@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {@Overridepublic void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {registry.addHandler(new MessageHandler(), "/ws").setAllowedOrigins("*"); // 允许所有客户端跨域连接}
}
MessageHandler代码
package org.example.hufamessagedemo;import org.springframework.web.socket.*;
import org.springframework.web.socket.handler.TextWebSocketHandler;import java.util.concurrent.CopyOnWriteArrayList;public class MessageHandler extends TextWebSocketHandler {private static final CopyOnWriteArrayList<WebSocketSession> sessions = new CopyOnWriteArrayList<>();@Overridepublic void afterConnectionEstablished(WebSocketSession session) {sessions.add(session);System.out.println("新客户端连接: " + session.getId());}@Overrideprotected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {System.out.println("收到消息: " + message.getPayload());// 广播给所有客户端for (WebSocketSession s : sessions) {if (s.isOpen()) {s.sendMessage(new TextMessage("用户" + session.getId() + ": " + message.getPayload()));}}}@Overridepublic void afterConnectionClosed(WebSocketSession session, CloseStatus status) {sessions.remove(session);System.out.println("客户端断开: " + session.getId());}
}
HufamessagedemoApplication代码
package org.example.hufamessagedemo;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class HufamessagedemoApplication {public static void main(String[] args) {SpringApplication.run(HufamessagedemoApplication.class, args);}}

pom.xml代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.5.5</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>org.example</groupId><artifactId>hufamessagedemo</artifactId><version>0.0.1-SNAPSHOT</version><name>hufamessagedemo</name><description>hufamessagedemo</description><url/><licenses><license/></licenses><developers><developer/></developers><scm><connection/><developerConnection/><tag/><url/></scm><properties><java.version>17</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

客户端代码:

DemoApplication代码
package com.example.demo;import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.WebSocketHttpHeaders;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.client.WebSocketClient;
import org.springframework.web.socket.client.standard.StandardWebSocketClient;
import org.springframework.web.socket.handler.TextWebSocketHandler;import java.net.URI;@SpringBootApplication
public class DemoApplication implements CommandLineRunner{public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}@Overridepublic void run(String... args) throws Exception {WebSocketClient client = new StandardWebSocketClient();WebSocketHandler handler = new TextWebSocketHandler() {@Overridepublic void afterConnectionEstablished(WebSocketSession session) throws Exception {System.out.println("✅ 已连接到服务端");session.sendMessage(new TextMessage("你好,我是客户端!"));}@Overrideprotected void handleTextMessage(WebSocketSession session, TextMessage message) {System.out.println("📩 收到服务端消息: " + message.getPayload());}};WebSocketHttpHeaders headers = new WebSocketHttpHeaders();// 这里传 handler、headers、URIWebSocketSession session = client.execute(handler, headers, URI.create("ws://localhost:8080/ws")).get();// 再发一条消息session.sendMessage(new TextMessage("第二条消息 from client"));}
}

pom.xml代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.5.5</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>org.example</groupId><artifactId>demo</artifactId><version>0.0.1-SNAPSHOT</version><name>demo</name><description>demo</description><url/><licenses><license/></licenses><developers><developer/></developers><scm><connection/><developerConnection/><tag/><url/></scm><properties><java.version>17</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-websocket</artifactId></dependency><dependency><groupId>org.glassfish.tyrus.bundles</groupId><artifactId>tyrus-standalone-client</artifactId><version>2.1.3</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

客户端端口8081,服务端端口8080.

效果图:

http://www.xdnf.cn/news/19787.html

相关文章:

  • 解决通过南瑞加密网关传输文件和推送视频的失败的问题
  • PyTorch 面试题及详细答案120题(116-120)-- 综合应用与实践
  • 专项智能练习(音频基础)
  • 水泵运行组态监控系统御控物联网解决方案
  • 基于SpringBoot的旅游管理系统
  • 03 - HTML常用标签
  • Nano Banana 的 100 种用法 - AI 图像生成完整提示词宝典
  • 超低延迟RTSP播放器的技术挑战与跨平台实现之道
  • 【GitOps】Argo CD部署应用程序
  • 嵌入式|RTOS教学——FreeRTOS基础2:任务调度
  • 【mac】如何在 macOS 终端中高效查找文件:五种实用方法
  • 怀古感今慎独自省慎思
  • 中科米堆CASAIM自动化三维测量设备测量汽车零部件尺寸质量控制
  • 安全、计量、远程控制,多用途场景下的智慧型断路器
  • 超10公里远距离图传模块——开启无线影像传输新纪元
  • 写好 Prompt 的 12 条实践经验
  • 目标检测定位损失函数:Smooth L1 loss 、IOU loss及其变体
  • ReACT Agent概述
  • 给你的应用穿上“外衣”:React中的CSS方案对比与实践
  • 【音视频】WebRTC ICE 模块深度剖析
  • redis哨兵模式的使用
  • 中山AI搜索优化实践:技术干货解析与金拓智能案例
  • 微信小程序wx.getLocation结合腾讯地图逆解析获取位置详细教程,定位授权完整流程
  • wpf触发器
  • AutoTrack-4X教育平台:完整工程编译指南与教学实践
  • 【面试题】Transformer相比RNN的优势?
  • Android开发之fileprovider配置路径path详细说明
  • 一体化气象传感器——为气象数据的快速、精准获取提供了高效解决方案
  • 运维基础->掌握正则、sed与awk:高效文本处理技巧
  • WeCross跨链-异构链跨链-(三)WeCross安装和跨链接入