Files
virtual_serial_guide/docs/serial-server-windows.md
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

11 KiB
Raw Permalink Blame History

返回首页

Windows 串口服务器部署

本文仅说明 Windows 上将物理 COM 口发布为 RFC 2217 或原始 TCP 串口服务的方法。FRP 客户端配置、服务安装和防火墙规则请参阅 FRP 客户端部署指南

方案比较与建议

方案 适用场景 RFC 2217 Windows 服务 主要注意事项
原生 Windows ser2net 可控制安装环境的开源生产部署 支持 需使用 WinSW 等包装器 必须安装相互匹配的 ser2net/gensio 版本
hub4com 快速开源实验或维护旧部署 支持 需使用外部包装器 上游最后一个版本发布于 2012 年
HHD TCP/IP Serial Ports Server 偏好 GUI 的商业部署 支持 内置 运行主机需要 HHD Virtual Serial Port Tools 许可证
FabulaTech Serial Port Redirector 需要持续维护和厂商支持的商业部署 支持 内置 收费,按容量授权

建议如下:

  • 新建开源生产环境:优先使用原生 Windows ser2net
  • 快速实验室验证:hub4com 配置最简单,但必须评估其年代和稳定性限制。
  • 需要 GUI、原生服务管理和商业支持:优先评估 FabulaTech。

1. 安装转换器并确认 COM 口

使用 Windows Update 或芯片厂商提供的已签名驱动。不要在未确认硬件型号时尝试安装 FTDI、WCH 等不同厂商的驱动;应先检查硬件 ID。

在“设备管理器”中展开“端口(COM 和 LPT)”,选中转换器并打开“属性 → 详细信息”。记录以下信息:

  • COM 名称;
  • 包含 VID、PID 的硬件 ID
  • 设备实例路径;
  • USB 序列号(如有);
  • 容器 ID
  • 位置路径。

使用 PowerShell 盘点当前端口:

Get-PnpDevice -Class Ports -PresentOnly |
  Sort-Object FriendlyName |
  Format-Table Status, FriendlyName, InstanceId -AutoSize

Get-CimInstance -ClassName Win32_SerialPort |
  Select-Object DeviceID, Name, Description, PNPDeviceID |
  Format-Table -AutoSize

也可使用 pySerial 查看更详细的信息:

py -m pip install pyserial
py -m serial.tools.list_ports -v

COM 编号只是 Windows 分配结果,不是持久的硬件身份。具有唯一序列号的 FTDI 转换器通常能稳定保留编号,但部分低价转换器没有序列号,或多个设备使用重复序列号。若无法通过序列号区分同型号设备,应固定其物理 USB 插口并记录位置路径。

端口编号达到 COM10 及以上时,各工具使用的写法不同:

  • 原生 Windows API\\.\COM10
  • ser2net/gensio//./COM10
  • pySerialCOM10

2. 方案 A:原生 Windows ser2net

2.1 安装 ser2net 和 gensio

截至 2026 年 7 月,上游(Corey Minyard 的 ser2net / gensio 项目)在各自 GitHub 发布页提供原生 Windows 安装包:

最新版本见 ser2net releasesgensio releases

预编译包之间存在版本耦合,应安装同期配套版本,不要任意混用:

  1. Gensio-3.0.2-windows.exe
  2. Ser2Net-4.6.7-windows.exe

使用更新版本前先检查上游发布说明,配套版本号会随时间变化。原生安装包使用 MinGW/UCRT 运行时 DLL,但运行时不需要 MSYS2 shell。

默认配置文件通常位于:

C:\Program Files\Ser2Net\etc\ser2net\ser2net.yaml

以管理员身份创建或编辑该文件。

2.2 配置 COM3 的 RFC 2217 服务

新部署应使用现代的 version-2 YAML

%YAML 1.1
---
connections:
  com3:
    accepter: telnet(rfc2217),tcp,127.0.0.1,2217
    connector: serialdev,//./COM3,115200n81

该配置具有以下行为:

  • 仅监听 IPv4 回环地址;
  • 允许同一 Windows 主机上的隧道客户端连接;
  • 不会额外在局域网接口上暴露通配监听器;
  • COM3 初始参数为 115200 波特、无校验、8 数据位、1 停止位;
  • 兼容的 RFC 2217 客户端可远程修改串口参数。

旧的 version-1 写法仍可被 ser2net 接受:

connection: &com3
  accepter: telnet(rfc2217),tcp,127.0.0.1,2217
  connector: serialdev,//./COM3,115200n81

但 version 1 有意不遵循标准 YAML。新部署必须优先使用 connections: 映射。

若只需要原始 TCP,不需要远程调整串口参数,可删除 telnet(rfc2217)

%YAML 1.1
---
connections:
  com3-raw:
    accepter: tcp,127.0.0.1,2217
    connector: serialdev,//./COM3,115200n81

远端客户端需要选择波特率时,不要使用原始 TCP 模式。

2.3 交互式本机测试

创建服务前,先在管理员 PowerShell 中前台运行:

& 'C:\Program Files\Ser2Net\bin\ser2net.exe' `
  -d `
  -c 'C:\Program Files\Ser2Net\etc\ser2net\ser2net.yaml'

-d 会保持前台运行并输出诊断信息。测试完成后按 Ctrl-C 停止。

若已安装 gensio 客户端工具,可测试本机协议栈:

gensiot 'telnet(rfc2217),tcp,127.0.0.1,2217'

仅能建立原始 TCP 连接,不能证明 RFC 2217 完整可用;还必须使用 pySerial 等兼容客户端实际测试一次波特率变更。

2.4 使用 WinSW 注册 Windows 服务

官方 Windows ser2net 安装程序不会创建原生 Windows 服务。不要使用 sc.exe create 直接注册 ser2net.exe:它是控制台程序,没有实现 Windows Service Control Manager 生命周期。

使用 WinSW 等服务包装器:

  1. 将稳定版 WinSW 放在 ser2net.exe 所在目录。
  2. 将 WinSW 重命名为 ser2net-service.exe
  3. 在同一目录创建同名配置文件 ser2net-service.xml
<service>
  <id>ser2net-rfc2217</id>
  <name>ser2net RFC 2217</name>
  <description>Exports Windows COM ports through RFC 2217</description>
  <executable>%BASE%\ser2net.exe</executable>
  <arguments>-n -c "%BASE%\..\etc\ser2net\ser2net.yaml"</arguments>
  <workingdirectory>%BASE%</workingdirectory>
  <logpath>C:\ProgramData\Ser2Net\logs</logpath>
  <log mode="roll" />
  <onfailure action="restart" delay="10 sec" />
  <resetfailure>1 hour</resetfailure>
</service>

在管理员 PowerShell 中创建日志目录,然后安装、启动并检查服务:

New-Item -ItemType Directory -Force C:\ProgramData\Ser2Net\logs
& 'C:\Program Files\Ser2Net\bin\ser2net-service.exe' install
& 'C:\Program Files\Ser2Net\bin\ser2net-service.exe' start
& 'C:\Program Files\Ser2Net\bin\ser2net-service.exe' status

上述示例为简化部署而使用 WinSW 默认服务账户。生产环境应改用专用的最小权限服务身份,只授予必要的程序文件、配置文件和日志目录访问权限。

也可以用 NSSM 代替 WinSW 包装 ser2net.exe,命令模式与 FRP 客户端部署指南的 NSSM 小节 一致,只需替换可执行文件与参数。

3. 方案 Bhub4com

com0com 项目包含提供 RFC 2217 功能的 hub4com 包装器。若发布的是现有物理 COM 口,不需要创建 com0com 虚拟串口对。

上游基础示例为:

com2tcp-rfc2217 COM3 7001

该命令默认监听所有 IPv4 接口。供本机隧道客户端使用时,应显式绑定回环地址并使用规范 COM 写法:

com2tcp-rfc2217 --interface 127.0.0.1 \\.\COM3 7001

高编号端口(例如 COM17):

com2tcp-rfc2217 --interface 127.0.0.1 \\.\COM17 7001

包装器默认会持续占用物理 COM 口。若只希望在网络客户端已连接时打开串口,可使用:

com2tcp-rfc2217 --interface 127.0.0.1 --share-com-port \\.\COM3 7001

仅在业务确实要求连接间释放端口时使用 --share-com-port;该选项不代表多个进程可以安全地并发占用同一串口。

3.1 限制与服务化

  • 上游最新 hub4com 版本为 2012 年发布的 2.1.0.0。
  • 分发的可执行文件是 32 位控制台程序。
  • 不内置 Windows 服务宿主。
  • 不提供 TLS、身份认证或访问控制。
  • 必须在实际部署镜像上验证现代 Windows、USB 重连、睡眠/恢复、服务账户和长时间运行行为。

只需要发布物理 COM 口时,不要安装 com0com 内核驱动。已签名的 com0com 驱动只在创建虚拟 COM 对时需要,典型场景是 Windows 客户端必须向旧应用呈现本地 COM 口。

服务化时可沿用前述 WinSW 模式:将 com2tcp-rfc2217 包装命令拆分为 WinSW 的 executable 和 arguments,并将 working directory 指向解压后的 hub4com 目录,确保可执行文件和插件能被找到。上线前应启用失败重启,并执行冷启动、USB 重插和睡眠恢复测试。

4. 方案 C:商业 GUI 产品

4.1 HHD TCP/IP Serial Ports Server

HHD TCP/IP Serial Ports Server 可将现有物理或 USB COM 口发布为原始 TCP 或 RFC 2217,并提供 GUI、命令行管理和内置 Windows 服务安装能力。

安装为服务:

psip_server.exe -install-service

文档给出的独立端口映射命令为:

psip_server.exe COM5=11111

省略协议时默认使用 RFC 2217,raw 用于选择原始 TCP。

部署前必须确认以下限制:

  • 根据厂商文档,服务会监听所有可用网络接口。如果预期只通过隧道访问,必须限制其局域网直接访问。
  • 当前公开的服务器文档中未验证到内置 TLS 功能。
  • HHD 的再分发文档说明:运行 TCP/IP Serial Ports Server 的计算机需要 Virtual Serial Port Tools 许可证。
  • HHD 另有一个限制条件不同的 Free Virtual Serial Ports 产品;不能据此假定 TCP/IP Serial Ports Server 已获得生产许可。

部署前向 HHD 确认当前试用条款和生产授权条件。

4.2 FabulaTech Serial Port Redirector

应选用 Serial Port Redirector,而不是 Network Serial Port Kit。该产品支持:

  • 物理 COM 口服务器模式;
  • RFC 2217 和原始 TCP
  • GUI 和 SPRCmd.exe 配置;
  • 作为 Windows 系统服务在用户登录前运行;
  • x86、x64 和 ARM64 安装包;
  • 厂商所述的可选证书式 SSL,以及可选客户端认证。

文档中的物理串口服务器命令为:

SPRCmd.exe setserver telnet-bin 3 7001 physical

该语法可能随产品版本变化;自动化前必须用已安装版本的帮助信息复核。

FabulaTech 是按容量收费的商业产品,试用期有限。公开说明没有完全明确试用期间物理服务器端口的计数方式,应向厂商确认。厂商将加密传输称为“SSL”,但已审阅的公开资料未说明实际启用的 TLS 协议版本和密码套件基线;如涉及合规要求,必须单独验证。

5. 故障排查

Windows 侧的常见问题——COM 口占用或拒绝访问、重新连接后 COM 编号变化、开机时序(服务早于 USB 枚举)、hub4com 意外监听 LAN、原生 ser2net 无法加载 DLL——集中在 故障排查 一页的“Windows 特定问题”一节,此处不再重复。