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

时间:2009-01-27 19:01:49

标签: linux tcp serial-port

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

9 个答案:

答案 0 :(得分:29)

您无需编写程序即可在Linux中执行此操作。只需pipe串口到netcat

netcat www.example.com port </dev/ttyS0 >/dev/ttyS0

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

答案 1 :(得分:10)

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

  • 制作带有串口的Linux机器盒侦听TCP端口以共享调制解调器:ser2net
  • 使用其他Linux工作站的“共享”调制解调器:remtty

答案 2 :(得分:8)

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

答案 3 :(得分:4)

在大多数现代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"
}

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

答案 4 :(得分:3)

我遇到了同样的问题。

我不太确定开源应用程序,但我测试了命令行Serial over Ethernet for Linux并且......它对我有用。

还要感谢Maygarden法官的指示。

答案 5 :(得分:2)

使用netcat在服务器中打开一个端口并开始监听:

nc -lvp port number

在你正在阅读串口的机器上,用netcat以root身份发送它:

nc <IP address> portnumber < /dev/ttyACM0

如果要将数据存储在服务器上,可以将数据重定向到文本文件。

首先创建一个保存数据的文件:

touch data.txt

然后开始保存数据

nc -lvp port number > data.txt

答案 6 :(得分:1)

我认为你的问题不太清楚。这里有几个关于如何捕获进入Linux串口的数据的答案,但也许你的问题反过来了?

如果您需要捕获来自Linux串行端口的数据并将其发送到服务器,那么有几个小硬件小玩意可以做到这一点,从简单的串行打印服务器开始,例如Lantronix gizmo

不,我不会以任何方式加入Lantronix。

答案 7 :(得分:1)

我几天来一直在努力解决这个问题。

我的问题源于VirtualBox / Ubuntu。我的机器上有很多USB串口。当我尝试将其中一个分配给VM时,它会破坏所有这些 - 即主机和其他VM不再能够使用其USB串行设备。

我的解决方案是在壁橱里设置一个独立的串口服务器。

我试过了ser2net,它将串口放在线上,但是remtty没有用。我需要将端口作为VM上的tty。

socat工作得很好。

这里有很好的指示:

Example for remote tty (tty over TCP) using socat

答案 8 :(得分:0)

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