31

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

4

10 回答 10

34

您无需编写程序即可在 Linux 中执行此操作。只需通过netcat管道串行端口:

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

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

于 2009-01-27T20:55:16.903 回答
13

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

  • 制作一个带有串口的 Linux 机器监听 TCP 端口以共享调制解调器:ser2net
  • 从另一个 Linux 工作站使用这个“共享”调制解调器:remtty
于 2009-08-10T23:41:51.160 回答
8

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

于 2010-07-05T06:57:51.003 回答
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"
}

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

于 2014-01-29T07:56:40.527 回答
3

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

nc -lvp port number

在您正在读取串行端口的机器上,以 root 身份使用 netcat 发送它:

nc <IP address> portnumber < /dev/ttyACM0

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

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

touch data.txt

然后开始保存数据

nc -lvp port number > data.txt
于 2014-01-29T04:37:58.863 回答
2

我有同样的问题。

我不太确定开源应用程序,但我已经为 Linux 测试了命令行 Serial over Ethernet并且......它适用于我。

还要感谢 Maygarden 法官的指示。

于 2010-04-01T13:22:32.797 回答
1

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

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

我的解决方案是在壁橱里碰巧有的上网本上设置一个独立的串行服务器。

我尝试了 ser2net,它可以将串行端口放在电线上,但 remtty 不起作用。我需要将端口作为虚拟机上的 tty。

socat 工作得很好。

这里有很好的说明:

使用 socat 的远程 tty(tty over TCP)示例

于 2011-06-16T18:58:03.750 回答
0

我觉得你的问题不是很清楚。这里有几个关于如何捕获进入 Linux 串行端口的数据的答案,但也许你的问题是相反的?

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

不,我与 Lantronix 没有任何关系。

于 2009-01-28T06:56:48.937 回答
0

TCP 到串行 Systemd 服务

当您的 Linux 机器运行 systemd(大多数都运行)时,您可以创建一个简洁的服务来使(USB)串行设备通过 TCP(telnet)可用。

安全警告:通过 TCP 暴露串行设备存在安全风险。

在这个例子中,我使用:

  • TCP 端口5900
  • 串口设备/dev/ttyUSB0(使用2次)
  • 串行速度115200Bps

您可以在下面的示例中编辑这些。查看sttync (netcat)的手册以获取更多选项。

以下所有命令都假定您是 user root。如果您不执行:sudo su -

该目录/etc/systemd/system应该已经存在。如果不是,您的系统可能没有运行 Systemd。

创建/etc/systemd/system/tcp2serial.service包含内容的文件:

[Unit]
Description=TCP to Serial

[Service]
TTYPath=/dev/ttyUSB0
ExecStartPre=/usr/bin/stty -F /dev/ttyUSB0 speed 115200
ExecStart=/usr/bin/nc -k -l 5900
StandardInput=tty
StandardOutput=tty
Restart=always

[Install]
WantedBy=default.target

创建文件后,您可以执行systemctl start tcp2serial以启动服务。

从同一网络中的另一台 Linux 计算机,您可以使用telnet [server] 5900. 要退出 telnet,请按Ctrl+]并键入quit Enter

编辑服务文件后,执行以下两个命令:

systemctl daemon-reload
systemctl restart tcp2serial

要使服务在启动时启动,请执行:

systemctl enable tcp2serial
于 2022-02-18T12:32:34.667 回答
-1

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

于 2009-01-27T20:17:08.527 回答