Files
crosstyanandClaude Opus 4.8 14dcf97c08 docs(windows): add NSSM service option and gensiot native client
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>
2026-07-17 15:24:01 +08:00

3.1 KiB
Raw Permalink Blame History

返回首页

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 自带的命令行工具 gensiotgensio 项目的一部分,随 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 端口。不要只检查脚本中的属性值;还应确认物理串口确实切换到对应波特率。

端到端验收项目

至少验证以下项目:

  1. RFC 2217 协商成功。
  2. 串口数据可以双向传输。
  3. 客户端修改波特率时,物理串口参数随之改变。
  4. 断开后可以重新连接。
  5. USB 串口转换器拔出并重新插入后,服务能够恢复。
  6. 重启后,设备与串口服务的映射仍然正确。

为什么 TCP 可达不等于 RFC 2217 可用

普通 telnet、裸 TCP 客户端或端口探测只能证明 TCP 连接能够建立,不能验证 RFC 2217 协商,也不能验证远程波特率等串口控制功能。测试客户端必须实现 RFC 2217。

例如,Windows 上的下列命令只验证 TCP 可达性:

Test-NetConnection FRPS_HOST -Port 2217

即使该命令成功,仍必须使用 pySerial/miniterm 和波特率修改脚本完成上述端到端测试。