Pregunta

Estoy usando un programa que habla a mi puerto COM, pero he hecho otro programa que yo quiero a los mensajes del puerto de comunicación "oler" y realice las acciones propias es contra esos mensajes en adición. ¿Es esto posible en .NET C #?

¿Fue útil?

Solución

Hay terceros bibliotecas fiesta / herramientas / productos que exponen el tráfico f usted está interesado.

Esto es que utilicé para la emulación de puerto serie - pero creo que ofrece algo que puede utilizar: http://com0com.sourceforge.net/

Otros consejos

Si usted tiene control sobre el primer programa que te habla puerto de comunicaciones, por qué no cambiar el programa para pasar los datos recibidos desde el puerto hasta el segundo programa de ustedes a través de la interacción remota o cualquier otro tipo de IPC. Mejor aún si se puede escribir un programa proxy que conecta al puerto COMM, y tienen 2 de que hable otro programa para este proxy para hacer el hecho de comunicación.

Otra idea es, si tiene que oler sólo los datos de entrada, se puede obtener un cable en Y (divisor) y conectarse a 2 puerto COMM, cada programa se conecta a cada puerto COMM. Pero hay que asegurarse de que el segundo programa no está tratando de transmitir. En algunos casos es posible que necesite un divisor de la que sólo se conecta al pin RX para la segunda salida. Déjeme saber si usted necesita el diagrama.

Si usted no tiene 2 COMM, se puede conseguir fácilmente un convertidor USB-serie por menos de 10 dólares.

Es posible rastrear el tráfico desde el puerto serie

Sin embargo tampoco parece ser un control "COMPortSniffer"

una técnica válida utilizado por sysinternals se presenta hay

Parece que depender de programación de Win32 sin embargo, no creo que tal cosa es posible directamente con C #

el proyecto de código ( http: //www.codeproject. com / Artículos / 75770 / Basic-serial-puerto-escucha-aplicación ) que tiene un gran tutorial sobre esto.

Se muestra cómo leer los datos que vienen de un puerto serie, y desde que usted debería ser capaz de leer los datos.

Un breve fragmento:

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));
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top