この質問は私の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は細かい作品を示唆したように、コマンドプロンプトで 'エコー' を使用します。 上記のコードのエコーと使用の違いは何ですか?
ゲストOSでコマンドプロンプトを開き、comポート(echo hello> com1)に "echo"すればどうなりますか?これを試すと、新しいNamedPipeClientStream( "mypipe")だけでデータを読み取ることができます。 – telewin
私は混乱しています。 Named PipesのCOMポートを使用しようとしていますか? – kenny
「エコー」を使用すると正常に動作します...ゲストOSで実行されているコードを追加しました – PetPaulsen