栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

微信小程序实现lot开发07 java网络通信控制继电器

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

微信小程序实现lot开发07 java网络通信控制继电器

继电器型号:网络继电器,支持云端开发,可以连接阿里云物联网控制台,避免内网与外网之间的网络连接的问题,做隧道的两端都只能是具备网络计算能力的虚拟终端,网络继电器不属于这一类。

TCP协议:可靠传输,三次握手(连接),四次挥手(断开),目的就是确保信息收发双方都稳定在线,可以及时收发信息,保证信息传输的可靠性。

A---------发信息------>B:A说你好我要发信息了,你准备好了吗? B说你好我可以接收。A说那我发过去+信息。

A-----断开-----B,A说你还在吗?B说我还在。A说那我断开了,B说OK。

java网络通信的知识点去创建一个可靠的TCP连接通道,实现数据的可靠传输。

以下代码是控制代码,为实现解耦合,我在前面的springboot项目里单独创建了一个辅助的工具组件单独负责发送控制信息(常开,常关,延时关):

package com.hlc.utils;


import java.io.*;
import java.net.*;


public class NetAndIoController {
    
    private   BufferedReader reader;
    private   BufferedWriter writer;
    private   Socket client;
    private ServerSocket server;
    
    public    int outSign;
    
    public    int serverPort;
    public  void TcpConnection(){
        try{
            
            server = new ServerSocket(serverPort);
            
            client = server.accept();
            System.out.println("连接成功");
            String clientAddress = client.getRemoteSocketAddress().toString().substring(1);
            String[] clientAddresses = clientAddress.split(":");
            System.out.println("客户端IP"+clientAddresses[0]+"端口"+clientAddresses[1]);
            reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
            writer = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
        }catch (IOException e) {
//            e.printStackTrace();
            System.out.println("----------------------目前的TCP链接并没有断开,依旧使用旧链接-------------------------");
        }
    }

    
    public  void sendOpenControllerMsg(){
        System.out.println("控制继电器通道常开吸合发送:AT+STACHn=1\r\n");
        String msg = "AT+STACH"+outSign+"=1rn";
        try {
            
            System.out.println("主机发送控制常开指令"+msg);
            writer.write(msg);
            writer.flush();
            
            msg = reader.readLine();
            msg = msg.replace("rn","\r\n");
            System.out.println("网络继电器应答"+msg);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    public  void sendDownControllerMsg(){
        System.out.println("控制继电器通道常关吸合发送:AT+STACHn=0\r\n");
        String msg = "AT+STACH"+outSign+"=0rn";
        try{
            System.out.println("主机发送控制常开指令"+msg);
            writer.write(msg);
            writer.flush();
            msg =  reader.readLine();
            msg = msg.replace("rn","\r\n");
            System.out.println("网络继电器应答"+msg);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    
    public void sendDelayOpenControllerMsg(){
        System.out.println("控制继电器通道开启后延时关闭发送:AT+STACHn=3,10\r\n");
        String msg = "AT+STACH"+outSign+"=3,10rn";
        try{
            System.out.println("主机发送控制常开指令"+msg);
            writer.write(msg);
            writer.flush();
            msg =  reader.readLine();
            msg = msg.replace("rn","\r\n");
            System.out.println("网络继电器应答"+msg);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    public  void shutClient(){
        try{
            System.out.println("关闭客户端连接");
            if (reader != null)
                reader.close();
            if (writer != null)
                writer.close();
            if (client != null)
                client.close();
            if (server != null)
                server.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

这里的简单的组件代码,就是负责实现这三个控制功能的,但是这个测试有一个问题,就是测试的设备参数里的目的IP与目的端口都得配置为测试主机的IP与6000端口,这里你可以选用cmd黑窗口输入ipconfig查看主机ip地址。

需要注意的是:如果不关闭当前连接,每次默认发送信息的时候就会用同一条通道,但是如果只关闭了两个缓冲流,那么你连信息都发不了。关闭连接会导致每次都要重新连接,时间上要求的话可以对频繁操作的设备进行同一条连接的控制。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1027277.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号