Domanda

Sto usando un programma che parla al mio porta COMM, ma ho fatto un altro programma che voglio i messaggi portuali "annusare" Comm ed eseguo è di possedere azioni contro quei messaggi in aggiunta. Questo è possibile in .NET C #?

È stato utile?

Soluzione

Non ci sono librerie di terze parti / strumenti / prodotti che espongono il traffico f siete interessati.

Ecco quello che ho usato per l'emulazione porta seriale - ma penso che offre qualcosa che si può usare: http://com0com.sourceforge.net/

Altri suggerimenti

Se avete il controllo del primo programma che ti parla COMM porta, perché non cambiare il programma per passare i dati ricevuti dalla porta al 2 ° programma di tuo tramite i servizi remoti o di qualsiasi altro tipo di IPC. Meglio ancora se si può scrivere un programma proxy che collegato alla porta COMM, e hanno 2 degli altri discorsi programma per questo proxy per ottenere la comunicazione fatta.

Un'altra idea è, se è necessario intercettare solo i dati in entrata, è possibile ottenere un cavo Y (splitter) e collegare a 2 porta COMM, ciascun programma si connette ad ogni porta COMM. Ma è necessario assicurarsi che il secondo programma non sta cercando di trasmettere. In alcuni casi potrebbe essere necessario un divisore che connette solo il perno RX per la 2a uscita. Fatemi sapere se avete bisogno il diagramma.

Se non si dispone di 2 COMM, si può facilmente ottenere un convertitore USB-Seriale per meno di USD10.

E 'possibile intercettare il traffico dalla porta seriale

Per quanto ci ha colpiti particolarmente sembrano essere un controllo "COMPortSniffer"

Una tecnica valida utilizzata da Sysinternals è presentato ci

E sembra basarsi sulla programmazione Win32 tuttavia, non penso una cosa del genere è possibile direttamente con C #

il progetto di codice ( http: //www.codeproject. com / articoli / 75770 / Basic-serial-port-ascolto-applicazione ) che ha un grande tutorial su questo.

Si mostra come leggere i dati provenienti da una porta seriale, e da che si dovrebbe essere in grado di leggere i dati.

Un breve frammento:

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));
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top