Question

J'utilise un programme qui parle à mon port COMM, mais je l'ai fait un autre programme que je veux « renifler » les messages du port comm et exécuter ses propres actions contre ces messages en plus. Est-ce possible dans .NET c #?

Était-ce utile?

La solution

Il existe des bibliothèques tiers / outils / produits qui exposent le trafic f vous êtes intéressé.

Voici un je pour l'émulation du port série - mais je pense qu'il offre quelque chose que vous pouvez utiliser: http://com0com.sourceforge.net/

Autres conseils

Si vous avez le contrôle sur le premier programme qui vous parle COMM port, pourquoi ne pas changer le programme pour transmettre des données reçues du port au 2ème programme de vos via Remoting ou tout autre type d'IPC. Mieux encore, si vous pouvez écrire un programme proxy connecté au port COMM, et ont 2 de l'autre parler du programme à ce proxy pour obtenir la communication faite.

Une autre idée est, si vous avez besoin de renifler les données entrantes seulement, vous pouvez obtenir un câble en Y (séparateur) et se connecter à deux ports COMM, chaque programme se connecte à chaque port COMM. Mais vous devez vous assurer que le 2ème programme ne cherche pas à transmettre. Dans certains cas, vous pourriez avoir besoin d'un diviseur qui relie uniquement la broche RX pour la 2ème sortie. Faites-moi savoir si vous avez besoin du diagramme.

Si vous n'avez pas 2 COMM, vous pouvez facilement obtenir un convertisseur USB-série pour moins de 10 USD.

Il est possible de renifler le trafic du port série

il ne marche pas semblent toutefois être un contrôle « COMPortSniffer »

Une technique valide utilisée par Sysinternals est présenté y

Il semble compter sur la programmation Win32 cependant, je ne pense pas qu'une telle chose est possible directement avec C #

le projet de code ( http: //www.codeproject. com / articles / 75770 / base-port série-écoute application ) qui a un bon tutoriel sur ce sujet.

Il montre comment lire des données provenant à partir d'un port série, et de ce que vous devriez être en mesure de lire les données.

Un court extrait:

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));
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top