当前位置: 首页 > article >正文

Linux下使用socat将TCP服务转为虚拟串口设备

Linux下使用socat将TCP服务转为虚拟串口设备

socat是一个强大的网络工具,可以将TCP连接转换为虚拟串口设备,这在嵌入式开发、工业控制等领域非常有用。下面详细介绍如何实现这一功能。

基本原理

socat可以通过创建伪终端(PTY)来模拟串口设备,然后将TCP连接与这个虚拟串口绑定,实现双向数据传输。

实现步骤

1. 创建虚拟串口设备

socat -d -d PTY,link=/dev/ttyVIRT0,raw,echo=0 TCP-LISTEN:12345,reuseaddr

这个命令会:

  1. 创建一个虚拟串口设备 /dev/ttyVIRT0
  2. 监听TCP端口12345
  3. 将所有TCP连接的数据转发到虚拟串口,反之亦然

2. 参数说明

  • PTY,link=/dev/ttyVIRT0:创建伪终端并链接到/dev/ttyVIRT0
  • raw:禁用终端处理
  • echo=0:禁用回显
  • TCP-LISTEN:12345:监听TCP端口12345
  • reuseaddr:允许地址重用

3. 测试连接

在另一个终端,可以使用以下方法测试:

方法1:使用telnet连接TCP端
telnet localhost 12345
方法2:使用串口工具连接虚拟串口
screen /dev/ttyVIRT0 115200

进阶用法

1. 设置波特率等串口参数

虽然虚拟串口不真正使用波特率,但可以模拟:

socat -d -d PTY,link=/dev/ttyVIRT0,b115200,raw,echo=0 TCP-LISTEN:12345,reuseaddr

2. 持久化运行

使用nohup让它在后台运行:

nohup socat -d -d PTY,link=/dev/ttyVIRT0,raw,echo=0 TCP-LISTEN:12345,reuseaddr &

3. 查看连接状态

lsof /dev/ttyVIRT0

实际应用场景

  1. 远程串口访问:将物理串口设备通过TCP共享
  2. 设备模拟:模拟串口设备供开发测试
  3. 协议转换:在串口协议和TCP协议间转换

注意事项

  1. 需要root权限创建设备文件
  2. 虚拟串口设备在socat退出后会自动消失
  3. 可以使用chmod设置设备权限供普通用户使用

完整示例

# 创建虚拟串口并监听TCP
sudo socat -d -d PTY,link=/dev/ttyVIRT0,raw,echo=0,group=dialout,mode=660 TCP-LISTEN:12345,reuseaddr &# 测试TCP端
telnet localhost 12345# 测试串口端
screen /dev/ttyVIRT0 115200

通过这种方式,可以方便地在TCP和串口之间建立桥梁,实现不同协议设备间的通信。

http://www.lryc.cn/news/2387839.html

相关文章:

  • docker push 报错 denied: requested access to the resource is denied
  • epub→pdf | which 在线转换??好用!!
  • PBX、IP PBX、FXO 、FXS 、VOIP、SIP 的概念解析以及关系
  • MySQL数据高效集成到金蝶云星空的技术分享
  • git 命令之-git cherry-pick
  • 如何在STM32CubeMX下为STM32工程配置调试打印功能
  • Linux系统 - 基本概念
  • kerberos在无痕浏览器 获取用户信息失败 如何判断是否无痕浏览器
  • 在h5端实现录音发送功能(兼容内嵌微信小程序) recorder-core
  • PDF电子发票数据提取至Excel
  • 【身份证识别表格】把大量手机拍摄的身份证信息转换成EXCEL表格的数据,拍的身份证照片转成excel表格保存,基于WPF和腾讯OCR的实现方案
  • FPGA高速接口 mipi lvds cameralink hdml 千兆网 sdi
  • Linux路径解析指南:逻辑路径 vs 实际路径详解
  • Azure 公有云基础架构与核心服务:从基础到实践指南
  • 【运维_日常报错解决方案_docker系列】一、docker系统不起来
  • C# 数组与字符串:全面解析与应用实践
  • 前端vue中使用signalr
  • Stable Diffusion底模对应的VAE推荐
  • centos7.5安装kubernetes1.25.0
  • ‌AT2659S射频前端芯片技术解析:L1频段低噪声高增益GNSS信号放大
  • ROS2学习(15)------ROS2 TF2 机器人坐标系管理器
  • 每日c/c++题 备战蓝桥杯(洛谷P3382 三分法求极值详解)
  • Vue+css实现扫描动画效果(使用@keyframes scan)
  • Windows 配置 ssh 秘钥登录 Ubuntu
  • Conda:环境移植及更新1--使用conda-pack
  • github好玩的工具
  • PHP学习笔记(九)
  • 共现矩阵的SVD降维与低维词向量计算详解
  • 信创 CDC 实战 | OGG、Attunity……之后,信创数据库实时同步链路如何构建?(以 GaussDB 数据入仓为例)
  • PyQt学习系列08-插件系统与模块化开发