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

StackOverflow https://stackoverflow.com/questions/358037

Вопрос

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

Можно перехватывать трафик из последовательного порта.

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

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

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

проект кода (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));
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top