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 wegame打不开英雄联盟
  • ¥15 公司的电脑,win10系统自带远程协助,访问家里个人电脑,提示出现内部错误,各种常规的设置都已经尝试,感觉公司对此功能进行了限制(我们是集团公司)
  • ¥15 救!ENVI5.6深度学习初始化模型报错怎么办?
  • ¥30 eclipse开启服务后,网页无法打开
  • ¥30 雷达辐射源信号参考模型
  • ¥15 html+css+js如何实现这样子的效果?
  • ¥15 STM32单片机自主设计
  • ¥15 如何在node.js中或者java中给wav格式的音频编码成sil格式呢
  • ¥15 不小心不正规的开发公司导致不给我们y码,