Pergunta

Eu estou usando um programa que fala a minha porta COMM, mas eu fiz um outro programa que eu quero as mensagens porta comm "farejar" e executar é acções próprias contra essas mensagens, além disso. Isso é possível em .NET C #?

Foi útil?

Solução

Existem partido bibliotecas / ferramentas / produtos terceiros que exponha o tráfego f você está interessado.

Aqui está um que eu utilizado para emulação de porta serial - mas eu acho que fornece algo que você pode usar: http://com0com.sourceforge.net/

Outras dicas

Se você tem controle sobre o primeiro programa que fala com você porta COMM, por que não mudar o programa para passar dados recebidos a partir do porto para o 2º programa de vocês através de comunicação remota ou qualquer outro tipo de IPC. Melhor ainda se você pode escrever um programa de proxy que conectado à porta COMM, e têm 2 do outro talk programa para este proxy para se a comunicação feita.

Outra idéia é, se você precisa cheirar apenas os dados de entrada, você pode obter um cabo Y (splitter) e se conectar a 2 porta COMM, cada programa se conecta a cada porta COMM. Mas você precisa ter certeza do 2º programa não está tentando transmitir. Em alguns casos você pode precisar de um divisor que só liga o pino RX para a 2ª saída. Deixe-me saber se você precisa do diagrama.

Se você não tem 2 COMM, você pode facilmente obter um conversor USB-Serial por menos de US $ 10.

É possível o tráfego fungada da porta serial

No entanto, há não parece ser um "COMPortSniffer" Control

A técnica válida usado por sysinternals é apresentado

Parece que confiar em Win32 programação no entanto, eu não acho que tal coisa é possível diretamente com C #

o projeto de código ( http: //www.codeproject. com / artigos / 75770 / Basic-de porta serial-listening-aplicativo) que tem um ótimo tutorial sobre este assunto.

Ele mostra como ler dados provenientes de uma porta serial, e desde que você deve ser capaz de ler os dados.

Uma breve trecho:

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top