Я использую программу, которая взаимодействует с моим COMM-портом, но я создал другую программу, которая, в дополнение к этому, хочу «обнюхивать» сообщения порта связи и выполнять свои собственные действия с этими сообщениями. Возможно ли это в .NET C#?





Есть возможность сниффать трафик с последовательного порта.
Однако, похоже, нет элемента управления "COMPortSniffer".
Действительный метод, используемый sysinternals, представлен там
Кажется, что это полагается на программирование Win32, однако я не думаю, что это возможно напрямую с C#.
Существуют сторонние библиотеки / инструменты / продукты, которые раскрывают интересующий вас трафик.
Вот тот, который я использовал для эмуляции последовательного порта, но я думаю, что он дает то, что вы можете использовать: http://com0com.sourceforge.net/
Если у вас есть контроль над первой программой, которая взаимодействует с вашим COMM-портом, почему бы не изменить программу для передачи данных, полученных от порта, во вторую вашу программу через удаленное взаимодействие или любой другой тип IPC. Еще лучше, если вы можете написать прокси-программу, которая подключена к COMM-порту, и попросить две другие программы взаимодействовать с этим прокси-сервером для выполнения связи.
Другая идея: если вам нужно прослушивать только входящие данные, вы можете получить Y-кабель (разветвитель) и подключиться к 2 COMM-порту, каждая программа подключается к каждому COMM-порту. Но вам нужно убедиться, что вторая программа не пытается передавать. В некоторых случаях вам может понадобиться разветвитель, который соединяет только вывод RX для 2-го выхода. Дайте мне знать, если вам понадобится диаграмма.
Если у вас нет 2 COMM, вы можете легко получить USB-последовательный преобразователь менее чем за 10 долларов США.
проект кода (http://www.codeproject.com/Articles/75770/Basic-serial-port-listening-application), в котором есть отличный учебник по этому поводу.
Он показывает, как читать данные, поступающие из последовательного порта, и оттуда вы должны иметь возможность читать данные.
Короткий фрагмент:
void _serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
int dataLength = _serialPort.BytesToRead;
byte[] data = new byte[dataLength];
int nbrDataRead = _serialPort.Read(data, 0, dataLength);
if (nbrDataRead == 0)
return;
// Send data to whom ever interested
if (NewSerialDataRecieved != null)
NewSerialDataRecieved(this, new SerialDataEventArgs(data));
}
В этом случае у вас должен быть контроль над исходным кодом основного потребителя для публикации прочитанных данных. Это не прослушивание установленной последовательной связи.