2011-02-05 17 views
1

この質問は私のearlier questionに関連しています。仮想PCとのCOMポート通信(パート2)

パイプへの接続は成功しましたが、ポートからデータを読み取る(または書き込む)ことができません。

私の最初の推測は、データがバッファされていたということでした。しかし、(クライアントサイトで)5000バイト(NamedPipeClientStreamのバッファは512バイト)のデータを書き込んでも、私は というデータを受け取ることはありません。

PipeOptions.WriteThroughも変更されませんでした。

COM-Portに書き込まれたデータをリダイレクトするためにパイプを使用せずテキストファイル(Virtual-PC設定)を使用すると、データは期待どおりにテキストファイルに書き込まれます。したがって、Virtual-PCで動作するクライアントテストプログラムはうまくいきます。問題は以下の私のコードにある可能性があります。

var pipe = new NamedPipeClientStream(".", "mypipe", PipeDirection.InOut, PipeOptions.WriteThrough); 

pipe.Connect(); 

// this is blocking 
int i = pipe.ReadByte(); 

var reader = new StreamReader(pipe); 
// this is blocking, too 
var s = reader.ReadLine(); 

更新:

私は、ゲストOS上で実行していますコード:

var port = new SerialPort("COM1"); 
port.Open(); 

port.WriteLine("Hallo"); 

telewinは細かい作品を示唆したように、コマンドプロンプトで 'エコー' を使用します。 上記のコードのエコーと使用の違いは何ですか?

+0

ゲストOSでコマンドプロンプトを開き、comポート(echo hello> com1)に "echo"すればどうなりますか?これを試すと、新しいNamedPipeClientStream( "mypipe")だけでデータを読み取ることができます。 – telewin

+0

私は混乱しています。 Named PipesのCOMポートを使用しようとしていますか? – kenny

+0

「エコー」を使用すると正常に動作します...ゲストOSで実行されているコードを追加しました – PetPaulsen

答えて

1

返事が遅れて申し訳ありませんが、あなたがVPC内(新しいSERIALPORTを開始します)あなたのプログラムを実行する「エコーこんにちは> COM1は」唯一前を動作しますが、私のテストでは

...それはまだ関連願っています。あなたがそれを実行した後、ゲストが再起動されるまで、ホストプログラムによって "echo hello> com1"は見えなくなります。

これは、SerialPort自体の初期化が永続的なものであることを示しています。 Reflectorを使用すると、SerialPortのctorは何の影響もありませんが、OpenメソッドはSerialStreamのctorを呼び出します。このctorは、読み込み/書き込みバッファ、Rts/Dtr、およびハンドシェイクモードを設定します。いくつかの試行の後、Rts/Dtrが "echo hello> com1"を壊すようです。

var port = new SerialPort("com1"); 
port.DtrEnable = true; 
port.RtsEnable = true; 
port.Open(); 
port.WriteLine("Hallo"); 
+1

+1ありがとうございます。ここでの問題は、私の初期の意図がレガシーアプリケーションのテスト/アップグレードであったことです。だから私はテストアプリケーションで上記のコードを変更することはできますが、私の '本当の'レガシーアプリケーションでは変更することはできません。その間、私はcom0comでいくつかのテストを行った。これは機能しています。だから私は仮想マシンで私の問題を解決するための私の最初の試みは複雑だったと思います。私はちょうど間違ったツールを使用していた。とにかく。ありがとうございました! – PetPaulsen

関連する問題