本文实现了datagramSocket进行发送modbus报文接收信息。
DatagramSocket datagramSocket = new DatagramSocket();
datagramSocket.setSoTimeout(timeout);//超时时间
byte[] sendInfo = new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x01, 0x03,0x00, 0x01, 0x00, 0x01 };
byte[] sendInfo = new byte[] {0x01, 0x03,0x00, 0x01, 0x00, 0x01, 0xD5, 0xCA };
//udp协议需要加上前面的报文头0x00, 0x00, 0x00, 0x00, 0x00, 0x06, rtu udp需要在后面加上校验码 0xD5, 0xCA
DatagramPacket dp = new DatagramPacket(sendInfo, sendInfo.length, InetAddress.getByName("127.0.0.1"), 502);
datagramSocket.send(dp);
DatagramPacket dp2 = new DatagramPacket(new byte[1024], 1024, InetAddress.getByName(ip), port);
datagramSocket.receive(dp2);
byte[] s2 = new byte[dp2.getLength()];
for (int i = 0; i < dp2.getLength(); i++) {
s2[i] = dp2.getData()[i];
}
s2为接收到的报文