weixin_45878294 2021-10-15 16:29 采纳率: 100%
浏览 59
已结题

spring boot怎么编写能持续监听的socket通信服务器

代码小白。对socket通信这块不了解,现在手上正好有个急事关于这个。主要内容就是第三方通过socket通信调用我的机器发送xml报文,自己测试的时候写了个main函数serversocket,但是实际上最后要部署到生产,main函数肯定不行,看网上说什么监听器、守护进程之类的根本不懂…还请大神们指导指导,最好简单源码支持下,万分感谢!

  • 写回答

3条回答 默认 最新

  • Winson.J 2021-10-15 17:18
    关注

    socket服务类

    package com.socket.server;
    
    import java.io.IOException;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class MytSocketServer {
    
        //服务监听端口号
        private int serverPort = 10002;
        
        //socket服务类
        private ServerSocket socketServer;
        
        //socket服务监听线程
        private ServerThread serverThread;
        
        public void initSocketServer() {
            
        }
        
        public void startServer() {
            try {
                //启动服务
                socketServer = new ServerSocket(serverPort);
            } catch (IOException e) {
                System.out.println("初始化SSLServer失败[IO异常]: " + e.getMessage());
                System.exit(0);
            }
            
            serverThread = new ServerThread();
            Thread workThread = new Thread(serverThread);
            workThread.start();
        }
        
        class ServerThread implements Runnable {
    
            @Override
            public void run() {
                while (true) {
                    Socket socket = null;
                    try {
                        //监控端口,没有连接时阻塞,
                        socket = socketServer.accept();
                        
                        //有连接,交给线程BusinessThread处理,让服务可以继续监控端口
                        new Thread(new BusinessThread(socket)).start();
                        
                        
                    } catch (IOException e) {
                        System.out.println("处理remote socket失败: " + e.getMessage());
                    }
                    
                    try {
                        //这里可以按需要设置时间间隔,业务多间隔就短点,反之就长点
                        Thread.sleep(50);
                    } catch (InterruptedException e) {
                    }
                }
            }
        }
    }
    
    

    业务处理线程类

    package com.socket.server;
    
    import java.net.Socket;
    
    public class BusinessThread implements Runnable {
        
        private Socket socket;
    
        public BusinessThread(Socket socket) {
            this.socket = socket;
        }
    
        @Override
        public void run() {
            //从socket中读取完整消息
            String xml = readXml();
            
            //一下进行其他处理
    
        }
    
        private String readXml() {
            // TODO Auto-generated method stub
            return null;
        }
    
    }
    

    测试类

    package com.socket.server;
    
    public class Test {
    
        public static void main(String[] args) {
            MytSocketServer sever = new MytSocketServer();
            sever.initSocketServer();
        }
    }
    

    部署到生产,先安装jdk

    1. 打成jar包 xxxxxx.jar
    2. 上传到生产服务器
    3. 配置相关的配置文件
    4. java -jar xxxxxx.jar 启动程序
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 10月24日
  • 已采纳回答 10月16日
  • 创建了问题 10月15日

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器