古いDOSCNCプログラムをリバースエンジニアリングしようとしていますが、成功は限られています。DOSプログラムからRx/Txストリームをスニッフィングし、これを見ました...
DOSからの送信:
"OUTPUT TEST" 0D
マシンからの受信:
"OUTPUT TEST" 0D 0D 0A
0D 0A
"TEST" 0D 0A
"0001> +09000 +09000 +00000 +00000 +00000 +00032 +00000 D O " 0D 0A
"0002> +00000 +03000 +00000 +00000 +00000 +00032 +00000 B N " 0D 0A
"0003> +00000 +03000 +00000 +00000 +00000 +00032 +00000 B N " 0D 0A
"0004> +00000 +03000 +00000 +00000 +00000 +00032 +00000 B N " 0D 0A
"0005> +00000 +03000 +00000 +00000 +00000 +00033 +00000 B N " 0D 0A
"0006> +00000 +03000 +00000 +00000 +00000 +00033 +00000 B N " 0D 0A
"0007> +00000 +03000 +00000 +00000 +00000 +00033 +00000 B N " 0D 0A
"0008> +00000 +03000 +00000 +00000 +00000 +00033 +00000 B N " 0D 0A
"0009> +00000 +03000 +00000 +00000 +00000 +00033 +00000 B N " 0D 0A
"0010> +09000 +17000 +00000 +00000 +00000 +00064 +00000 B X . " 0D 0A
14 0D 0A
"PIN> "
もちろん、読みやすいようにストリームを再フォーマットする必要がありました。
ご覧のとおり、最後の行には改行がありません。最後の行は次のリクエストでのみ表示されるため、これによりReadLineは役に立たなくなります。コマンドを送信して最後まで読むことができる必要があります。私がこれを達成することができた唯一の方法は、送信がマシン上で完了するのに十分な時間スリープしてから、PC上でデータを処理することです。一部のマシンでは、遅延を5秒まで高く設定する必要があります。私はそれをこのようにするのは嫌ですが、それは機能します。
While spUISC.BytesToRead > 0
buffer &= spUISC.ReadExisting
Threading.Thread.Sleep(100)
End While
概要
終了文字がない場合、着信ストリームが完了したかどうかを確認するにはどうすればよいですか?