Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

LuckyKuang/DeviceSimulator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

11 Commits

Repository files navigation

TCP/UDP 设备模拟器

该项目可用于Iot行业的TCP/UDP设备模拟,主要用来做压力测试

如果业务上不需要区分十进制和十六进制,可以直接使用ascii,它的编解码器兼容十六进制指令的接收和发送,TCP如果也用ascii发送十六进制,末尾就必须添加0d0a

技术架构

  1. OpenJDK 21
  2. SpringBoot 3.2.2
  3. Netty 4.1.105.Final

功能实现

  • TCP设备批量模拟(十进制)
  • TCP设备批量模拟(十六进制)
  • UDP设备批量模拟(十进制)
  • UDP设备批量模拟(十六进制)

粘包/拆包问题解决方案

  • TCP协议十进制解析规则:通过指定分割符\n或者\r\n来解析指令
  • TCP协议十六进制解析规则:通过指定分割符0d0a来解析指令
  • UDP协议无需处理

项目启动前提及教程

  1. 每个路由地址需要有一台路由器支持
  2. 每一个模拟地址都不能被其他程序占用
  3. 满足1,2的条件后,设置本机网络地址
IP:192.168.1.2
MASK:255.255.255.0
GATEWAY:192.168.1.1
DNS:192.168.1.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
  1. 模拟超过一个路由器数量的设备,就需要多台路由器支持,具体网络配置自行研究,这里不做过多描述

指令配置说明

自定义指令设置数据举例(asciiCommandSetup.json)

{
 "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"

自定义指令返回数据(asciiData.json)

{
 "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包
  1. run.bat脚本
".\data\jre\bin\java.exe" -jar "DeviceSimulator-1.0.0.jar"
cmd.exe
  1. 必须使用jre21及以上版本,下载地址:https://www.azul.com/downloads/#downloads-table-zulu

About

基于Netty的TCP/UDP 设备模拟器。基于:OpenJDK 21、SpringBoot 3.2.2、Netty 4.1.105.Final

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

Contributors

Languages

AltStyle によって変換されたページ (->オリジナル) /