springBoot启动socket服务端

socket服务端简单实现实例

  • springBoot启动socket服务端
    • SOCKET服务端启动
    • SOCKET客户端连接测试
      • 模拟业务处理线程类
      • 模拟监测服务心跳线程类
      • 补充一下目录结构分布
      • 测试输出效果

SOCKET服务端启动

通过以下两个类实现了springboot启动类,启动socket服务端

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;@Component
public class ServerSocketConfig {private static Logger log = LoggerFactory.getLogger(ServerSocketConfig.class);public static ServerSocket serverSocket = null;private static final ThreadPoolExecutor threadpool = new ThreadPoolExecutor(15, 15,10L, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>());@Beanpublic void socketCreate() {try {serverSocket = new ServerSocket(5030);log.info("socket服务端开启");while (true){Socket socket = serverSocket.accept();System.out.println("接收到客户端socket" + socket.getRemoteSocketAddress());threadpool.execute(new ServerReceiveThread(socket));}} catch (IOException e) {log.info("socket服务启动异常");e.printStackTrace();}}
}
import com.alibaba.fastjson.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;public class ServerReceiveThread implements Runnable {private Socket socket;private static Logger log = LoggerFactory.getLogger(ServerReceiveThread.class);public ServerReceiveThread(Socket socket) {this.socket = socket;}@Overridepublic void run() {try {//输入流接收数据ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());//输出流发送数据ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());while (true) {JSONObject jsonObject = (JSONObject) ois.readObject();System.out.println(jsonObject.toJSONString());String message = jsonObject.getString("msg");if ("close".equals(message)) {oos.writeUTF("close");oos.flush();break;} else {oos.writeUTF("接收数据成功" + message);oos.flush();}}log.info("服务端关闭客户端[{}]", socket.getRemoteSocketAddress());oos.close();ois.close();socket.close();} catch (Exception e) {log.info("接收数据异常socket关闭");e.printStackTrace();} finally {log.info("数据异常数据要怎么保留");}}
}

SOCKET客户端连接测试

模拟测试客户端连接-主测试类

package test;import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class ClientTest {private static final ExecutorService  executorService = Executors.newFixedThreadPool(5);private static String host = "127.0.0.1";private static int port = 5030;public static void main(String[] args) {executorService.execute(new ClientHeartThread(host,port));executorService.execute(new ClientPrintThread(host,port));
//        new Thread(new ClientPrintThread(host,port)).start();
//        new Thread(new ClientHeartThread(host,port)).start();}
}

可以使用线程池或者多个线程类start都可以就是我注释的地方

模拟业务处理线程类

package test;import com.alibaba.fastjson.JSONObject;import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.util.Scanner;public class ClientPrintThread implements Runnable{private String host;private int port;public ClientPrintThread(String host,int port){this.host = host;this.port = port;}@Overridepublic void run() {try {Socket socket = new Socket(host,port);System.out.println("业务socket链接成功");//输出流写数据ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());Scanner scanner = new Scanner(System.in);//输入流读数据ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());while (true){String str = scanner.nextLine();JSONObject jsonObject = new JSONObject();jsonObject.put("type","body");jsonObject.put("msg",str);oos.writeObject(jsonObject);oos.flush();//写的部分String message = ois.readUTF();System.out.println("接收到服务端响应"+message);if("close".equals(message)){break;}}ois.close();oos.close();socket.close();} catch (IOException e) {e.printStackTrace();}}
}

模拟监测服务心跳线程类

package test;import com.alibaba.fastjson.JSONObject;import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;public class ClientHeartThread implements Runnable{private String host;private int port;public ClientHeartThread(String host, int port){this.host = host;this.port = port;}@Overridepublic void run() {try {Socket socket = new Socket(host,port);System.out.println("心跳socket链接成功");//输出流写数据ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());//输入流读数据ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());int i =0;while (true){Thread.sleep(3000);JSONObject jsonObject = new JSONObject();jsonObject.put("type","heart");jsonObject.put("msg","第"+i+"次心跳");System.out.println("发送心跳socket");oos.writeObject(jsonObject);oos.flush();i++;String message = ois.readUTF();System.out.println("接收到服务端响应"+message);if("close".equals(message)){break;}}ois.close();oos.close();socket.close();} catch (Exception e) {e.printStackTrace();}}
}

补充一下目录结构分布

是先启动springboot在启动客户端连接服务

测试输出效果

服务端打印客户端发来的业务数据消息


客户端发送消息,并且接收服务端反馈的消息打印结果
我们开了两个客户端socket一个是心跳socket一个是业务socket
我们在客户端socket敲入任意信息可以在服务端输出打印


服务端输出结果如下图

当我们在客户端输入close 时候我们就会关闭业务socket
但是不影响心跳socket继续运行
同时下次我们在开启业务socket链接可以继续向socket服务端通信
socket服务端不会中断,

实际socket长链接与我们正常开发的http协议一样,
如果服务端接收数据发现客户端发送的业务数据进行校验
如果校验不对就主动关闭客户端socket。

SpringBoot+SOCKET服务端客户端相关推荐

  1. springboot socket服务端_从零开始学SpringBoot之Spring Boot WebSocket:编码分析

    前言: 在上一篇文章中讲到了WebSocket的原理,这节中我们先简单的编码分析下,这样有助于在之后的实战编码. 说明: (1)编码中使用的Spring Boot版本是:1.5.8: (2) 使用We ...

  2. springboot socket服务端_SpringBoot2.x系列教程81--SpringBoot中整合WebSockets

    SpringBoot2.x系列教程81--SpringBoot中整合WebSockets 作者:一一哥 一. WebSockets简介 1. 什么是WebSockets WebSocket是HTML5 ...

  3. JAVA SOCKET 服务端/客户端可随时从任意一方发消息的例子

    网上找到不少例子都是必须客户端先发送一个消息,服务端再回复一条消息.这样的方式对于服务端想主动发送消息给客户端就很不方便了. 研究了一下,发现主要是因为BufferedReader的时候用readli ...

  4. Springboot整合socket服务端

    使用springboot框架实现socket通信的服务端,接收客户端发来的消息. 随项目启动而启动. package com.socket;import java.io.IOException; im ...

  5. 【★更新★】高性能 Windows Socket 服务端与客户端组件(HP-Socket v2.0.1 源代码及测试用例下载)...

    HP-Socket 以前为某大型通信项目开发了一套通用 Windows Socket TCP 底层通信组件,组件代号为 HP-Socket.现在把 HP-Socket 的所有代码向大众公开,希望能对大 ...

  6. Java:socket服务端,socket服务端支持多连接,socket客户端,socket客户端支持发送和接受

    一.Java之socket服务端 新建一个Java工程 命名 给他先创建一个类 在类里面我们做一个main 这里面也需要,创建套接字,IP号,端口号 但是java中有一个类         Serve ...

  7. php socket(服务端与客户端)demo

    php socket(服务端与客户端)demo完整演示: 环境是:[phpstydy,PHP版本7.3.4nts],一定要开启[sockets]服务. 服务器[index.php](源码复制即可): ...

  8. C# Socket服务端与客户端通信(包含大文件的断点传输)

    步骤: 一.服务端的建立 1.服务端的项目建立以及页面布局 2.各功能按键的事件代码 1)传输类型说明以及全局变量 2)Socket通信服务端具体步骤:   (1)建立一个Socket   (2)接收 ...

  9. Java高级补充(Socket服务端、客户端)、Handler类、安卓Socket传数据、WebView

    Socket服务端简单地API: 主要用到以下几个API:ServerSocket用来设置端口号.accept用来和服务端连接.getInputStream用来获取输入流.read用来读取输入流里面的 ...

最新文章

  1. 局域网组建与维护(1)
  2. 最完整的Explain总结,SQL优化不再困难
  3. js设置div高度低于滚动高度时固定
  4. ajax从mysql提取数据在html中_Python骚操作,提取pdf文件中的表格数据!
  5. PHP 算法之 -- 计算器设计
  6. 备忘录 - FL2440 开发板操作要点及注意事项
  7. STM32F407+CubeMX+Keil上移植RTX5实时系统
  8. App个人信息保护合规十大常见问题及处置策略
  9. springboot制作补丁包通用解决方案
  10. 光影精灵安装ubuntu20.04安装显卡驱动外界显示屏
  11. Linux su 命令
  12. 内容分发网络:请简述 CDN 回源如何工作?
  13. Arch报错日志ACPI BIOS Error (bug): Failure creating named object“INFO: task kworker/2:1H:107 blocked“
  14. python爬虫——40行代码爬取「笔趣看」全部小说
  15. 【Pigeon源码阅读】RPC底层通信实现原理(八)
  16. 服务器装系统步骤图解win7,win7安装系统图解教程
  17. Windows8.1设置默认输入法为英文
  18. 程序员的核心竞争力分享
  19. 关于正负数相除及取余问题
  20. lpop 原子_高中化学丨中心原子杂化轨道类型的判断方法!

热门文章

  1. 小程序开发---“逆战版”
  2. lichee linux nfs,lichee开发板搭建nfs
  3. 布线(Layout)设计概念
  4. js字符串和字节的互相转换
  5. 2-6 ance desc选择器
  6. Commonjs、Amd、Cmd、Umd、EsMoudle
  7. 协议分析---TCP/IP协议和邮件协议
  8. c++ opencv imread函数浅解
  9. 怎么解决高并发下抢红包和商品超卖问题?
  10. java/php/net/python保险公司报销设计