Document NSSM (fawno/nssm.cc rebuild) as an alternative to WinSW for wrapping frpc/ser2net, with a WinSW-vs-NSSM recommendation. Add gensiot as a native RFC 2217 client alongside pySerial, noting it is optional for a server-only deployment. Update references. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
3.1 KiB
RFC 2217 客户端端到端测试
本文用于从远程客户端验证完整的 RFC 2217 链路:客户端通过 FRP 公网端点连接串口服务,完成 RFC 2217 协商、双向数据传输和远程串口参数修改。
准备 pySerial
Linux 或其他通常以 python3 启动 Python 的环境:
python3 -m pip install pyserial
Windows PowerShell:
py -m pip install pyserial
使用 miniterm 连接
Linux:
python3 -m serial.tools.miniterm \
rfc2217://FRPS_HOST:2217 \
9600
Windows PowerShell:
py -m serial.tools.miniterm "rfc2217://FRPS_HOST:2217" 9600
将 FRPS_HOST、端口 2217 和初始波特率 9600 替换为实际部署值。
对于需要轮询调制解调器状态的设备,pySerial URL 可使用:
rfc2217://FRPS_HOST:2217?poll_modem
备选:gensio 原生客户端 gensiot
如果不想依赖 Python,也可以用 gensio 自带的命令行工具 gensiot(gensio 项目的一部分,随 Windows 版 gensio 安装包一起提供)。它是原生的 RFC 2217 客户端,同样能控制波特率、停止位等串口参数:
gensiot 'telnet(rfc2217),tcp,FRPS_HOST,2217'
普通 telnet 命令不支持 RFC 2217,因此不能用来验证串口参数控制。本手册只部署服务器,客户端工具(pySerial 或 gensiot)仅用于验证链路,任选其一即可。
显式测试远程波特率修改
保存并运行以下 Python 脚本:
import serial
port = serial.serial_for_url(
"rfc2217://FRPS_HOST:2217",
baudrate=9600,
timeout=1,
)
print("Initial baud rate:", port.baudrate)
port.baudrate = 19200
print("Changed baud rate:", port.baudrate)
port.write(b"test\r\n")
print(port.read(100))
port.close()
Linux 运行方式:
python3 baud_test.py
Windows PowerShell 运行方式:
py .\baud_test.py
执行 port.baudrate = 19200 时,pySerial 会发送 RFC 2217 控制命令。该命令经 FRP 转发后,应由串口服务器应用到 Linux 串口设备或 Windows COM 端口。不要只检查脚本中的属性值;还应确认物理串口确实切换到对应波特率。
端到端验收项目
至少验证以下项目:
- RFC 2217 协商成功。
- 串口数据可以双向传输。
- 客户端修改波特率时,物理串口参数随之改变。
- 断开后可以重新连接。
- USB 串口转换器拔出并重新插入后,服务能够恢复。
- 重启后,设备与串口服务的映射仍然正确。
为什么 TCP 可达不等于 RFC 2217 可用
普通 telnet、裸 TCP 客户端或端口探测只能证明 TCP 连接能够建立,不能验证 RFC 2217 协商,也不能验证远程波特率等串口控制功能。测试客户端必须实现 RFC 2217。
例如,Windows 上的下列命令只验证 TCP 可达性:
Test-NetConnection FRPS_HOST -Port 2217
即使该命令成功,仍必须使用 pySerial/miniterm 和波特率修改脚本完成上述端到端测试。