Преобразование данных последовательного порта в TCP / IP в среде Linux - PullRequest
26 голосов
/ 27 января 2009

Мне нужно получить данные из последовательного порта системы Linux и преобразовать их в TCP / IP для отправки на сервер. Это сложно сделать? У меня есть некоторый базовый опыт программирования, но мало опыта работы с Linux. Есть ли приложение с открытым исходным кодом, которое делает это?

Ответы [ 9 ]

29 голосов
/ 27 января 2009

Вам не нужно писать программу для этого в Linux. Просто pipe через последовательный порт netcat :

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

Просто замените адрес и информацию о порте. Кроме того, возможно, вы используете другой последовательный порт (то есть измените часть /dev/ttyS0). Вы можете использовать команды stty или setserial для изменения параметров последовательного порта (скорость передачи, четность, стоп-биты и т. Д.).

10 голосов
/ 11 августа 2009

Я наткнулся на этот вопрос через поиск в Google для очень похожего (с использованием последовательного порта на сервере от клиента Linux через TCP / IP), поэтому, хотя это не является ответом на точный оригинальный вопрос, кода может быть полезным для оригинального плаката, я думаю:

  • Настройка Linux-бокса с последовательным портом для прослушивания TCP-порта для совместного использования модема: ser2net
  • Использование этого «общего» модема с другой рабочей станции Linux: remtty
8 голосов
/ 05 июля 2010

Вы можете создать последовательное соединение по локальной сети (SOL), используя socat . Его можно использовать для «пересылки» ttyS на другую машину, чтобы он отображался как локальный или вы можете получить к нему доступ через порт TCP / IP.

4 голосов
/ 29 января 2014

Все необходимые вам инструменты уже доступны в большинстве современных дистрибутивов 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 в соответствии с последовательным устройством, с которым вы пытаетесь подключиться.

3 голосов
/ 01 апреля 2010

У меня была такая же проблема.

Я не совсем уверен насчет приложений с открытым исходным кодом, но я протестировал командную строку Serial over Ethernet для Linux и ... она работает для меня.

Также спасибо судье Мейгардену за инструкции.

2 голосов
/ 29 января 2014

Откройте порт на вашем сервере с помощью netcat и начните прослушивание:

nc -lvp port number

И на машине, с которой вы читаете последовательный порт, отправьте его с netcat от имени root:

nc <IP address> portnumber < /dev/ttyACM0

Если вы хотите сохранить данные на сервере, вы можете перенаправить данные в текстовый файл.

Сначала создайте файл, в который вы сохраняете данные:

touch data.txt

А затем начните сохранять данные

nc -lvp port number > data.txt
1 голос
/ 16 июня 2011

Я боролся с этой проблемой уже несколько дней.

Проблема для меня возникла с VirtualBox / Ubuntu. У меня много последовательных портов USB на моей машине. Когда я попытался назначить одну из них на виртуальную машину, все они были засорены - то есть хост и другие виртуальные машины больше не могли использовать свои последовательные USB-устройства.

Мое решение состоит в том, чтобы настроить автономный последовательный сервер на нетбуке, который у меня есть в шкафу.

Я попробовал ser2net, и он работал, чтобы подключить последовательный порт, но remtty не работало. Мне нужно получить порт как tty на виртуальной машине.

Сокат работал отлично.

Здесь есть хорошие инструкции:

Пример для удаленного tty (tty через TCP) с использованием socat

1 голос
/ 28 января 2009

Я думаю, что ваш вопрос не совсем понятен. Здесь есть несколько ответов о том, как перехватить данные, поступающие в последовательный порт Linux, но, возможно, ваша проблема в обратном?

Если вам нужно перехватить данные, поступающие из последовательного порта Linux, и отправить их на сервер, есть несколько маленьких аппаратных штуковин, которые могут это сделать, начиная с простого сервера последовательной печати, такого как Lantronix gizmo .

Нет, я никак не связан с Lantronix.

0 голосов
/ 27 января 2009

Вы можете найти Perl или Python полезными для получения данных из последовательного порта. Чтобы отправить данные на сервер, решение может быть простым, если сервер (скажем, приложение HTTP) или даже популярная база данных. Решение было бы не таким простым, если бы это было какое-то нестандартное / проприетарное приложение TCP.

...