在Linux环境中将串行端口数据转换为TCP/IP

28 linux tcp serial-port

我需要从Linux系统的串行端口获取数据并将其转换为TCP/IP以发送到服务器.难道这难吗?我有一些基本的编程经验,但没有太多的Linux经验.是否有一个开源应用程序这样做?

Jud*_*den 31

您不需要编写程序来在Linux中执行此操作.只需通过netcat 管道串口:

netcat www.example.com port </dev/ttyS0 >/dev/ttyS0
Run Code Online (Sandbox Code Playgroud)

只需替换地址和端口信息即可.此外,您可能正在使用不同的串行端口(即更改/dev/ttyS0部件).您可以使用sttysetserial命令更改串行端口的参数(波特率,奇偶校验,停止位等).

  • 错字:将"<cat/dev/ttyS0"更改为"</ dev/ttyS0".功能:可能将它放在shell脚本中,同时:执行netcat ... done如果存在文件I/O结束的危险,例如,如果它是调制解调器,则丢失运营商等. (2认同)
  • 您可能还想看看socat (2认同)

And*_*w Y 11

我通过谷歌搜索一个非常相似的问题(通过TCP/IP使用Linux客户端服务器上的串口)偶然发现了这个问题,所以即使这不是原始问题的答案,一些代码可能对原版海报有用,我想:

  • 制作带有串行端口的Linux机器盒在TCP端口上侦听以共享调制解调器:ser2net
  • 从另一个Linux工作站使用这个"共享"调制解调器:remtty

  • 我相信ser2net支持[RFC 2217](http://tools.ietf.org/html/rfc2217). (3认同)

小智 8

您可以使用socat创建LAN上串行(SOL)连接.它可用于将ttyS"转发"到另一台机器,因此它显示为本地机器,或者您可以通过TCP/IP端口访问它.

  • 根据[本页](http://www.dest-unreach.org/socat/contrib/socat-rfc2217.html),socat不直接支持[RFC 2217](http://tools.ietf.org/html/rfc2217),但它提供了一个补丁来支持它. (2认同)

Dwi*_*cer 6

您需要的所有工具都已在大多数现代 Linux 发行版上提供。

正如一些人指出的那样,您可以通过 netcat 管道传输串行数据。但是,每次有连接时,您都需要重新启动一个新实例。为了在连接之间保持这种状态,您可以使用以下配置创建 xinetd 服务:

service testservice
{
    port        = 5900
    socket_type = stream
    protocol    = tcp
    wait        = yes
    user        = root
    server      = /usr/bin/netcat
    server_args = "-l 5900 < /dev/ttyS0"
}
Run Code Online (Sandbox Code Playgroud)

请务必更改/dev/ttyS0以匹配您尝试与之连接的串行设备。


Bas*_*ash -1

您可能会发现PerlPython对于从串行端口获取数据很有用。要将数据发送到服务器,如果服务器是(比方说)HTTP 应用程序甚至是流行的数据库,那么解决方案可能很简单。如果它是一些自定义/专有的 TCP 应用程序,那么解决方案就不那么容易了。