В C # как я могу слушать COM (последовательный) порт, который уже открыт?

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

10.12.2008 23:51:09
4 ОТВЕТА
РЕШЕНИЕ

Существуют сторонние библиотеки / инструменты / продукты, которые предоставляют интересующий вас трафик.

Вот тот, который я использовал для эмуляции последовательного порта - но я думаю, что он предоставляет то, что вы можете использовать: http://com0com.sourceforge.net/

5
11.12.2008 01:08:54

Есть возможность прослушивать трафик с последовательного порта

Однако, кажется, нет элемента управления "COMPortSniffer"

Действительная техника, используемая sysinternals представлена там

Кажется, он полагается на программирование на Win32, но я не думаю, что это возможно напрямую с помощью C #

2
10.12.2008 23:56:49

Если у вас есть контроль над первой программой, которая взаимодействует с вашим портом COMM, почему бы не изменить программу для передачи данных, полученных с порта, во вторую программу через удаленное взаимодействие или любой другой тип IPC. Еще лучше, если вы можете написать прокси-программу, подключенную к порту COMM, и попросить 2 других программ связаться с этим прокси-сервером, чтобы установить связь.

Другая идея заключается в том, что если вам нужно прослушивать только входящие данные, вы можете получить Y-кабель (разветвитель) и подключиться к 2 COMM порту, каждая программа подключается к каждому COMM порту. Но вы должны убедиться, что 2-я программа не пытается передать. В некоторых случаях вам может потребоваться разветвитель, который подключает только контакт RX для второго выхода. Дайте мне знать, если вам нужна диаграмма.

Если у вас нет 2 COMM, вы можете легко получить USB-последовательный конвертер менее чем за 10 долларов США.

3
11.12.2008 07:38:43

проект кода ( 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));
}
0
3.09.2014 08:10:02
В этом случае вы должны иметь контроль над основным исходным кодом потребителя для публикации прочитанных данных. Это не нюхает установленную последовательную связь.
sahl04 20.07.2017 22:54:42