机器人通道机Http对接协议
一、使用概述 二、Udp组播协议 三、设置模块(所有该模块都为下发消息) 四、车辆进出场交互逻辑 五、客户端控制设备的显示和播报 六、其它

1、搜索设备

更新时间:2023-03-23

1,在局域网中,在未知设备IP的前提下,能搜索出设备,Http协议不能达到这个功能,所以采用Udp协议;

     采用的组播地址:239.255.255.250     端口号:37020

2,发送的数据格式,统一使用 Xml格式的数据;

<?xml version="1.0" encoding="utf-8"?>
<Probe>
    <DeviceType>FULLFDevice</DeviceType>
    <Uuid>781FC569-B980-4742-AF9C-49569FFBB4C0</Uuid>
    <Types>inquiry</Types>
</Probe>

3,当搜索到设备后,设备会相应的返回数据;

<?xml version="1.0" encoding="UTF-8"?>
<ProbeMatch>
    <Uuid>BB5A6773-5CDE-4206-8F05-45E9407C9666</Uuid>
    <Types>inquiry</Types>
    <DeviceType>Intellduty</DeviceType>
    <DeviceDescription>Intellduty</DeviceDescription>
    <DeviceSN>NULL</DeviceSN>
    <CommandPort>5000</CommandPort>
    <MAC>00-A4-0E-FE-BE-EE</MAC>
    <CpuSerial >ecf6a6e07acc9a8e</CpuSerial >
    <IPv4Address>192.168.2.2</IPv4Address>
    <IPv4SubnetMask>255.255.255.0</IPv4SubnetMask>
    <IPv4Gateway>192.168.2.1</IPv4Gateway>
    <DNS1>8.8.8.8</DNS1>
    <DNS2></DNS2>
    <DHCP>false</DHCP>
    <SoftwareVersion>S.U206.K202.R006.B122</SoftwareVersion>
    <BootTime>2020-09-15 11:51:21</BootTime>
    <Activated>false</Activated>
    <ET>NULL</ET>
    <UID>NULL</UID>
</ProbeMatch>

说明如下:DeviceType的类型,常见有 Robot -机器人 ;Intellduty-通道机 ;LaneCodeInterphone-车道码对讲机

CpuSerial即为设备的唯一标记,也是http协议中deviceno的内容;

4,参考的Java代码

    MulticastSocket socket = null;
    public void runClient() {
        try {
            byte[] receiveBuffer = new byte[1024 * 16];
            DatagramPacket receivePacket = new DatagramPacket(receiveBuffer, receiveBuffer.length);
            InetAddress group = InetAddress.getByName("239.255.255.250");
            socket = new MulticastSocket(37020);
            socket.joinGroup(group);//加入组播地址
            send();
            send();
            send();

            while (!closed) {
                socket.receive(receivePacket);
                System.out.println("received packet from " + receivePacket.getAddress().getHostAddress() + " : " + receivePacket.getPort());
                String msg = new String(receivePacket.getData(), receivePacket.getOffset(), receivePacket.getLength());
                if (msg != null) {
                    if (msg.contains("Robot")
                            || msg.contains("Intellduty")
                            || msg.contains("LaneCodeInterphone")) {
                        System.out.println("received packet from " + receivePacket.getAddress().getHostAddress() + " : " + receivePacket.getPort());
                        System.out.println("received " + msg);
                    }
                }
                Thread.sleep(1000);
            }
            socket.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 组播发送数据
     */
    public void send() {
        String msg = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
                "<Probe>\n" +
                "    <DeviceType>FULLFDevice</DeviceType>\n" +
                "    <Uuid>781FC569-B980-4742-AF9C-49569FFBB4C0</Uuid>\n" +
                "    <Types>inquiry</Types>\n" +
                "</Probe>";
//        String msg = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
//                "<Probe>\n" +
//                "    <Uuid>9D6ED2F3-3466-473C-8295-8F0168829022</Uuid>\n" +
//                "    <Types>update</Types>\n" +
//                "    <PWErrorParse>true</PWErrorParse>\n" +
//                "    <MAC>00-A4-0E-FE-BE-EE</MAC>\n" +
//                "    <DeviceType></DeviceType>\n" +
//                "    <Password>0</Password>\n" +
//                "    <IPv4Address>192.168.2.2</IPv4Address>\n" +
//                "    <CommandPort>5000</CommandPort>\n" +
//                "    <HttpPort>80</HttpPort>\n" +
//                "    <IPv4SubnetMask>255.255.255.0</IPv4SubnetMask>\n" +
//                "    <IPv4Gateway>192.168.2.1</IPv4Gateway>\n" +
//                "    <DNS>192.168.2.1</DNS>\n" +
//                "    <IPv6Address>::</IPv6Address>\n" +
//                "    <IPv6Gateway></IPv6Gateway>\n" +
//                "    <IPv6MaskLen>64</IPv6MaskLen>\n" +
//                "    <DHCP>false</DHCP>\n" +
//                "</Probe>";
        try {
            byte[] message = msg.getBytes(); //发送信息
            InetAddress inetAddress = InetAddress.getByName(ip); //指定组播地址
            DatagramPacket datagramPacket = new DatagramPacket(message, message.length, inetAddress, port); //发送数据包囊
            MulticastSocket multicastSocket = new MulticastSocket();//创建组播socket
            multicastSocket.send(datagramPacket);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

 

个搜索结果,搜索内容 “

    0 个搜索结果,搜索内容 “