アリスです。
1.BeginReadの前に、データが来ているかチェック
1 2 3 4 | if(ns.DataAvailable) { IAsyncResultar=ns.BeginRead(readBytes,0,readBytes.Length,null,null); } |
この方法だと、普通に実行した場合、データがまだきておらず、読み込みができなかった。
ステップ実行だと、ゆっくりなので必ずif分のなかにはいるのだが。。
2.読み込みサイズが256バイト以下だったら、読み込み停止
1 2 3 4 5 6 | intreadSize=ns.EndRead(ar); if(readSize<256) { Break; } |
この方法は駄目。複数回受信するコマンドの場合に駄目。最初の1回目が33バイトで、2回目が256バイトとなるパターンがあった。
これもステップ実行だと、ちゃんとうまくいくのだが・・
3.無限ループにした
1 2 3 4 5 6 7 8 9 10 11 | byte[]readBytes=newbyte[256]; while(true) { IAsyncResultar=ns.BeginRead(readBytes,0,readBytes.Length,null,null); if(ar.AsyncWaitHandle.WaitOne(timeout)==false) { break; } intreadSize=ns.EndRead(ar); ms.Write(readBytes,0,readSize); } |