2008-12-10 25 views

Odpowiedz

5

Istnieją biblioteki/narzędzia/produkty stron trzecich, które eksponują ruch z twojego zainteresowania.

Oto jeden użyłem do emulacji portu szeregowego - ale myślę, że zapewnia coś można użyć: http://com0com.sourceforge.net/

2

Jest to możliwe do wykrycia ruchu z portu szeregowego

Jednak nie robi wydaje się być „COMPortSniffer” Control

Poprawna technika używana przez sysinternals prezentowana jest there

Wydaje polegać na programowaniu Win32 jednak nie sądzę, że coś takiego jest możliwe bezpośrednio z C#

2

Jeśli masz kontrolę nad pierwszym programem, który mówi do ciebie Comm portu, dlaczego nie zmienić program przekazywać dane otrzymane z portu do drugiego programu użytkownika za pośrednictwem zdalnego sterowania lub dowolnego innego typu IPC. Jeszcze lepiej, jeśli możesz napisać program proxy, który łączył się z portem COMM, i mieć 2 z innych programów rozmawiać z tym proxy, aby uzyskać komunikację.

Innym pomysłem jest, jeśli chcesz sniffować tylko przychodzące dane, możesz uzyskać kabel Y (splitter) i połączyć się z 2 portem COMM, każdy program łączy się z każdym portem COMM. Ale musisz się upewnić, że drugi program nie próbuje transmitować. W niektórych przypadkach może być potrzebny rozdzielacz, który łączy tylko pin RX dla drugiego wyjścia. Daj mi znać, jeśli potrzebujesz diagramu.

Jeśli nie masz 2 COMM, możesz łatwo uzyskać konwerter USB-Serial za mniej niż 10 USD.

0

projekt kodu (http://www.codeproject.com/Articles/75770/Basic-serial-port-listening-application), który ma świetny samouczek na ten temat.

Pokazuje, jak odczytywać dane przychodzące z portu szeregowego iz tego powodu powinien być możliwy odczyt danych.

krótki fragment:

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

W tym przypadku trzeba mieć kontrolę na temat pierwotnego kodu źródłowego konsumentów do publikowania danych odczytu. Nie wącha ustalonej komunikacji szeregowej. – sahl04