java socket spring_SpringBoot之集成Socket

该博客介绍了如何在SpringBoot应用中集成Java Socket,通过`SocketHandler`类实现客户端Socket的注册、信息发送、接收及资源回收。文章详细讲解了Socket连接、数据读写以及错误处理的过程。
摘要由CSDN通过智能技术生成

packagecom.geniuses.sewage_zero_straight.net.socket;importlombok.extern.slf4j.Slf4j;importjava.io.DataInputStream;importjava.io.DataOutputStream;importjava.io.IOException;importjava.net.Socket;import static com.geniuses.sewage_zero_straight.net.socket.SocketPool.*;/*** Socket操作处理类*/@Slf4jpublic classSocketHandler{/*** 将连接的Socket注册到Socket池中

*@paramsocket

*@return

*/

public staticClientSocket register(Socket socket){

ClientSocket clientSocket= newClientSocket();

clientSocket.setSocket(socket);try{

clientSocket.setInputStream(newDataInputStream(socket.getInputStream()));

clientSocket.setOutputStream(newDataOutputStream(socket.getOutputStream()));byte[] bytes = new byte[1024];

clientSocket.getInputStream().read(bytes);

clientSocket.setKey(new String(bytes, "utf-8"));

add(clientSocket);returnclientSocket;

}catch(IOException e) {

e.printStackTrace();

}return null;

}/*** 向指定客户端发送信息

*@paramclientSocket

*@parammessage*/

public static voidsendMessage(ClientSocket clientSocket, String message){try{

clientSocket.getOutputStream().write(message.getBytes("utf-8"));//clientSocket.getOutputStream().writeUTF(message);

} catch(IOException e) {

log.error("发送信息异常:{}", e);

close(clientSocket);

}

}/*** 获取指定客户端的上传信息

*@paramclientSocket

*@return

*/

public staticString onMessage(ClientSocket clientSocket){byte[] bytes = new byte[1024];try{

clientSocket.getInputStream().read(bytes);

String msg= new String(bytes, "utf-8");returnmsg;

}catch(IOException e) {

e.printStackTrace();

close(clientSocket);

}return null;

}/*** 指定Socket资源回收

*@paramclientSocket*/

public static voidclose(ClientSocket clientSocket){

log.info("进行资源回收");if (clientSocket != null){

log.info("开始回收socket相关资源,其Key为{}", clientSocket.getKey());

remove(clientSocket.getKey());

Socket socket=clientSocket.getSocket();try{

socket.shutdownInput();

socket.shutdownOutput();

}catch(IOException e) {

log.error("关闭输入输出流异常,{}", e);

}finally{try{

socket.close();

}catch(IOException e) {

log.error("关闭socket异常{}", e);

}

}

}

}/*** 发送数据包,判断数据连接状态

*@paramclientSocket

*@return

*/

public static booleanisSocketClosed(ClientSocket clientSocket){try{

clientSocket.getSocket().sendUrgentData(1);return false;

}catch(IOException e) {return true;

}

}

}

Spring Boot中集成WebSocket可以使用Spring的WebSocket模块来实现。下面是一个简单的示例,演示如何在Spring Boot应用程序中使用WebSocket。 1. 添加依赖 在您的pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> ``` 2. 创建WebSocket配置类 创建一个WebSocket配置类,该类将启用WebSocket支持并定义WebSocket处理程序。 ```java @Configuration @EnableWebSocket public class WebSocketConfig implements WebSocketConfigurer { @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(new MyWebSocketHandler(), "/my-websocket-endpoint"); } } ``` 3. 创建WebSocket处理程序 创建一个WebSocket处理程序,该处理程序将处理传入的WebSocket连接。 ```java public class MyWebSocketHandler extends TextWebSocketHandler { @Override public void handleTextMessage(WebSocketSession session, TextMessage message) { // 处理消息 } } ``` 4. 配置WebSocket的端点 在您的应用程序中创建一个控制器类,并将WebSocket端点映射到该类中的方法。 ```java @Controller public class WebSocketController { @MessageMapping("/hello") @SendTo("/topic/greetings") public Greeting greeting(HelloMessage message) throws Exception { return new Greeting("Hello, " + message.getName() + "!"); } } ``` 5. 测试WebSocket连接 现在,您可以使用JavaScript或其他客户端来测试WebSocket连接。以下是一个简单的JavaScript示例: ```javascript var socket = new WebSocket('ws://localhost:8080/my-websocket-endpoint'); socket.onopen = function() { console.log('WebSocket is open!'); }; socket.onmessage = function(event) { console.log('WebSocket message received:', event.data); }; socket.onclose = function() { console.log('WebSocket is closed!'); }; ``` 以上是一个简单的Spring Boot集成WebSocket的示例。您可以根据自己的需求进行调整和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值