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

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

Ответы [ 4 ]

5 голосов
/ 11 декабря 2008

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

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

3 голосов
/ 11 декабря 2008

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

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

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

2 голосов
/ 11 декабря 2008

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

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

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

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

0 голосов
/ 03 сентября 2014

код проекта (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));
}
...