zoukankan      html  css  js  c++  java
  • springboot项目添加TCP接口数据上传/下发

    一般在启动类上添加

    注意:一般检测TCP传输的数据软件----Sockit

    @SpringBootApplication
    
    public class Application extends SpringBootServletInitializer implements CommandLineRunner {
    
    	@Autowired      //注意此处将要用的TCP进行调用
    	TcpSocketServer tcpSocketServer;
    public static void main(String[] args)throws IOException { SpringApplication.run(Application.class, args); } @Override //重写run方法,来对TCP数据进行操作 public void run(String... args) throws Exception { tcpSocketServer.startSocketServer(port); //注:此处port绑定端口号 } }

     在 tcpSocketServer 内:   注意:一般涉及TCP接口的项目都是关于指令上传和下发的

    @Component
    @Slf4j      //前提是 导入了lombok的包
    public class TcpSocketServer extends BaseController {
    	@Autowired
    	TcpServices tcpServices;
    	@Autowired
    	XxxService xxxService;
    	
        private Charset cs = Charset.forName("UTF-8");
    	//接受数据缓冲区
    	private static ByteBuffer sBuffer = ByteBuffer.allocate(1024);
    	//发送数据缓冲区
    	private static ByteBuffer rBuffer = ByteBuffer.allocate(1024);
    	//监听器
    	private static Selector selector;
    
    	private static String	responseMsg;
    	/**
    	 * 启动socket服务,开启监听
    	 *
    	 * @param port
    	 * @throws IOException
    	 */
    	public  void startSocketServer(int port) {
    		try {
    			//打开通信信道
    			ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
    			//设置为非阻塞
    			serverSocketChannel.configureBlocking(false);
    			//获取套接字
    			ServerSocket serverSocket = serverSocketChannel.socket();
    			//绑定端口号
    			serverSocket.bind(new InetSocketAddress(port));
    			//打开监听器
    			selector = Selector.open();
    			//将通信信道注册到监听器
    			serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);
    
    			//监听器会一直监听,如果客户端有请求就会进入相应的事件处理
    			while (true) {
    				selector.select();//select方法会一直阻塞直到有相关事件发生或超时
    				Set<SelectionKey> selectionKeys = selector.selectedKeys();//监听到的事件
    				for (SelectionKey key : selectionKeys) {
    					handle(key);
    				}
    				selectionKeys.clear();//清除处理过的事件
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    
    	/**
    	 * 处理不同的事件
    	 *
    	 * @param selectionKey
    	 * @throws IOException
    	 */
    	private void handle(SelectionKey selectionKey) throws IOException {
    		ServerSocketChannel serverSocketChannel = null;
    		SocketChannel socketChannel = null;
    		String requestMsg = "";
    		int count = 0;
    		if (selectionKey.isAcceptable()) {
    			//每有客户端连接,即注册通信信道为可读
    			serverSocketChannel = (ServerSocketChannel) selectionKey.channel();
    			socketChannel = serverSocketChannel.accept();
    			socketChannel.configureBlocking(false);
    			socketChannel.register(selector, SelectionKey.OP_READ);
    		} else if (selectionKey.isReadable()) {
    			socketChannel = (SocketChannel) selectionKey.channel();
    			rBuffer.clear();
    			count = socketChannel.read(rBuffer);
    
    			//读取数据
    			if (count > 0){
    			rBuffer.flip(); //从缓存区头部开始读取数据操作
                   //缓存区读取到的数据
                    requestMsg = String.valueOf(cs.decode(rBuffer).array()); }
     //这里是处理从TCP接口上传的数据业务层,一般可以在业务层根据switch case来对不同数据进行分类方法处理
    xxxServices.dealMethods(requestMsg); 
    sBuffer = ByteBuffer.allocate(responseMsg.getBytes("UTF-8").length);

    //一般responseMsg为从数据库或其他数据源处获取的数据字符串
    //此处为指令下发
    responseMsg=configurationMap.toString();
    		sBuffer.put(responseMsg.getBytes("UTF-8"));			      									
    		sBuffer.flip();
    		socketChannel.write(sBuffer);				
    				}	
    		socketChannel.close();
    		  }
    		}
    	  }
    	}
    

      

     

    
    
  • 相关阅读:
    微服务架构技术栈选型手册(万字长文)
    Visual Studio 2013 always switches source control plugin to Git and disconnect TFS
    Visual Studio 2013 always switches source control plugin to Git and disconnect TFS
    MFC对话框中使用CHtmlEditCtrl
    ATL开发 ActiveX控件的 inf文件模板
    ActiveX: 如何用.inf和.ocx文件生成cab文件
    Xslt 1.0中使用Array
    如何分隔两个base64字符串?
    An attempt was made to load a program with an incorrect format
    JQuery 公网 CDN
  • 原文地址:https://www.cnblogs.com/pureray-hui/p/13367035.html
Copyright © 2011-2022 走看看