Em C # como eu poderia ouvir uma COM Porta (série) que já está aberto?
-
21-08-2019 - |
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 #?
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 há
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));
}