C#ではどのように私はすでにオープンしているCOM(シリアル)ポートに耳を傾けるだろうか?
-
21-08-2019 - |
質問
私はCOMMポートに話すプログラムを使用していますが、私は「スニフ」COMMポートメッセージにしたい別のプログラムを作り、加えてそれらのメッセージに対するそれ自身のアクションを実行しています。これは、.NET、C#で可能ですか?
解決
あなたが興味を持っているfのトラフィックを公開するサードパーティのライブラリ/ツール/製品があります。
ここで私は、シリアルポートエミュレーション用に使用されるものである - しかし、私はそれはあなたが使用できる何かを提供していと思います: http://com0com.sourceforge.net/する
他のヒント
あなたがリモートまたはIPCの他のタイプを経由してあなたの第二のプログラムにポートから受信したデータを渡すようにプログラムを変更しない理由は、ポートをCOMMに話す最初のプログラムを管理している場合。より良いまだあなたがCOMMポートに接続されたプロキシプログラムを作成し、通信を成し遂げるために、このプロキシに他のプログラムの話の2を持つことができるかどうか。
あなただけの着信データを盗聴する必要がある場合は、もう一つのアイデアは、あなたがY型ケーブル(スプリッター)を取得し、2 COMMポートに接続することができますされ、各プログラムは、各COMMポートに接続します。しかし、あなたは第二のプログラムが送信しようとしていないことを確認する必要があります。いくつかのケースでは、唯一の第二出力のためのRXピンを接続するスプリッタが必要になる場合があります。あなたが図を必要とする場合、私に教えてくださいます。
あなたは2 COMMを持っていない場合、あなたは簡単にUSD10未満のためにUSBシリアル変換器を得ることができます。
シリアルポートからのトラフィックを盗聴することが可能である。
しかし「COMPortSniffer」コントロールがあるように思えるdoes notの
のSysinternalsによって使用される有効な技術が提示されている存在する
しかし、私はそのようなことは、C#
と直接可能であると思ういけないWin32プログラミングに依存しているようですコードプロジェクト(ます。http://www.codeproject。この上の偉大なチュートリアルを持っているCOM /記事/ 75770 /ベーシック・シリアル・ポート・リスニング・アプリケーションで)ます。
これは、シリアルポートから入ってくるデータを読み取るために、それから、あなたがデータを読み取ることができなければならない方法を示しています。
の短い抜粋ます:
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));
}