Моя цель — создать последовательное соединение между двумя удаленными компьютерами. Сообщение, которое я хочу отправить с виртуального последовательного порта, будет перенаправлено на портал с использованием протокола TCP. Затем портал отправляет полученное сообщение и перенаправляет его на последовательный порт другого компьютера.
Для этого я протестировал и хочу смоделировать программу Последовательный порт для Ethernet используя с ++. Эта программа позволяет мне создавать клиентское соединение, которое будет инициировать перенаправление данных локального реального или виртуального последовательного порта на удаленный сервер по протоколу TCP / IP. Клиент должен работать на ОС Windows. На данный момент я создал просто TCP-клиент, использующий QT, и я могу отправить QString на сервер (портал), но мне нужно написать некоторые строки с гипертерминала (такого как Putty), который открыт в виртуальном последовательном порту (COMx) что я должен создать.
Сервер создан этой командой socat:
socat -d -d pty,link=/dev/ttyS0,raw,echo=0 tcp-listen:1234
Так что я могу переслать строки, которые я получил на последовательный порт / DEV / ttyS0 это в Fedora OS.
Теперь, чтобы создать виртуальный последовательный порт, я искал в Интернете, и я нашел CreateFile функция.
С помощью этой функции я написал в QT этот код:
#include <windows.h>
HANDLE driver = CreateFileA("\\.\COM15", GENERIC_READ | GENERIC_WRITE, 0, 0, CREATE_NEW, 0, 0);
driver = CreateFileA("\\.\COM15", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if(driver == INVALID_HANDLE_VALUE)
{
qDebug() << GetLastError();
CloseHandle(driver);
return;
}
else
{
qDebug("Open");
qdebug() << driver;
return;
}
Если я зайду в управление устройством (в Windows 10), я не найду новое устройство COM15 в разделе Порты (COM и LPT). Зачем?
Неправильная функция, которую я использовал?
Какую функцию я должен использовать для создания драйвера, который позволяет мне создавать виртуальный COM-порт с использованием C ++?
Задача ещё не решена.
Других решений пока нет …