You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ser2net配合ZMQ串口电台时端口占用及双串口配置问题

问题与解决方案

问题根源

你当前的ser2net.conf已将TCP端口5557、5556分别映射到/dev/ttyUSB0和/dev/ttyUSB1,这两个端口被ser2net占用,导致ZMQ服务端无法绑定5557端口,触发"port is already in use"错误。

解决思路

ser2net与ZMQ不能共用同一TCP端口,需调整两者的端口分配,以下是两种可行方案:

方案一:修改ZMQ端口,避开ser2net占用的端口

保持ser2net配置不变,调整ZMQ代码使用未被占用的端口(例如5558):

修改后的server.py

import time
import zmq

context = zmq.Context()
socket = context.socket(zmq.REP)
# 改用未被ser2net占用的5558端口
socket.bind("tcp://*:5558")

while True:
    message = socket.recv()
    print(f"Received request: {message}")
    time.sleep(1)
    socket.send_string("World")

修改后的client.py

import zmq

context = zmq.Context()
print("Connecting to hello world server...")
socket = context.socket(zmq.REQ)
# 连接到服务端新的5558端口
socket.connect("tcp://localhost:5558")

for request in range(10):
    print(f"Sending request {request} ...")
    socket.send_string("Hello")
    message = socket.recv()
    print(f"Received reply {request} [ {message} ]")

方案二:修改ser2net端口,让出ZMQ所需端口

修改ser2net.conf,将原端口替换为其他值(例如6667、6666),让ZMQ可以正常使用5557、5556:

修改后的ser2net.conf

localhost,6667:raw:0:/dev/ttyUSB0:57600 8DATABITS NONE 1STOPBIT
localhost,6666:raw:0:/dev/ttyUSB1:57600 8DATABITS NONE 1STOPBIT

修改后重启ser2net服务:

sudo systemctl restart ser2net

重启后ZMQ原代码可直接正常运行,无需修改。

额外说明

如果你的需求是通过串口电台传输ZMQ消息,当前架构逻辑有误:ser2net的作用是将TCP端口映射为串口,而ZMQ服务端/客户端是直接建立TCP连接,两者用途不同。若要通过串口电台传递ZMQ消息,需让ZMQ两端分别通过ser2net连接到串口,而非一端直接绑定TCP端口。

内容的提问来源于stack exchange,提问作者rocklegend

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 06:00:09