该项目可用于Iot行业的TCP/UDP设备模拟,主要用来做压力测试
如果业务上不需要区分十进制和十六进制,可以直接使用
ascii,它的编解码器兼容十六进制指令的接收和发送,TCP如果也用ascii发送十六进制,末尾就必须添加0d0a
- OpenJDK 21
- SpringBoot 3.2.2
- Netty 4.1.105.Final
- TCP设备批量模拟(十进制)
- TCP设备批量模拟(十六进制)
- UDP设备批量模拟(十进制)
- UDP设备批量模拟(十六进制)
- TCP协议十进制解析规则:通过指定分割符
\n或者\r\n来解析指令 - TCP协议十六进制解析规则:通过指定分割符
0d0a来解析指令 - UDP协议无需处理
- 每个路由地址需要有一台路由器支持
- 每一个模拟地址都不能被其他程序占用
- 满足1,2的条件后,设置本机网络地址
IP:192.168.1.2
MASK:255.255.255.0
GATEWAY:192.168.1.1
DNS:192.168.1.1- 添加其他地址,管理员打开CMD运行如下win脚本(如果需要删除批量添加的地址,只需要设置一下自动获取IP即可)
# (3,1,254) 代表192.168.1.3~192.168.1.254 第二个数值1代表步长
# "以太网" 代表网卡名称
FOR /L %I IN (3,1,254) DO netsh interface ip add address "以太网" 192.168.1.%I 255.255.255.0- 模拟超过一个路由器数量的设备,就需要多台路由器支持,具体网络配置自行研究,这里不做过多描述
{
"AT+System=On": {
"AT+System?": "AT+System#On"
},
"AT+System=Off": {
"AT+System?": "AT+System#On",
"AT+LightSource?": "AT+LightSource#Off"
},
"AT+LightSource=On": {
"AT+LightSource?": "AT+LightSource#On"
},
"AT+LightSource=Off": {
"AT+LightSource?": "AT+LightSource#Off"
}
}如上JSON显示,此JSON用于修改机器响应
例一:客户端发送开机指令AT+System=On,就相当于设置了【开机】查询的指令,即对应的修改为"AT+System?": "AT+System#On"
例二:客户端发送开机指令AT+System=Off,就相当于设置了【关机】查询的指令,即对应的修改为"AT+System?": "AT+System#On"和"AT+LightSource?": "AT+LightSource#Off"
{
"AT+System?": "AT+System#Off",
"AT+System=On": "AT+System#Ok",
"AT+System=Off": "AT+System#Ok",
"AT+LightSource?": "AT+LightSource#Off",
"AT+LightSource=On": "AT+LightSource#Ok",
"AT+LightSource=Off": "AT+LightSource#Ok"
}如上JSON显示,此JSON用于机器立马响应
例一:客户端发送开机查询指令AT+System?,机器立马响应AT+System#Off,表示机器目前属于关机状态
例二:客户端发送开机指令AT+System=On,机器立马响应AT+System#Ok,表示机器目前一直设置成功
|-DeviceSimulator/ -- 模拟器目录
|--|-data/ -- 数据目录
|--|--|-jre/ -- 运行环境目录
|--|--|-asciiCommandSetup.json -- 十进制指令设置数据
|--|--|-asciiRespData.json -- 十进制指令返回数据
|--|--|-hexCommandSetup.json -- 十六进制指令设置数据
|--|--|-hexRespData.json -- 十六进制指令返回数据
|--|-run.bat -- 运行脚本(双击即可运行)
|--|-DeviceSimulator-1.0.0.jar -- 运行所需jar包
- run.bat脚本
".\data\jre\bin\java.exe" -jar "DeviceSimulator-1.0.0.jar"
cmd.exe- 必须使用jre21及以上版本,下载地址:
https://www.azul.com/downloads/#downloads-table-zulu