すがブロ

sugamasaoのhatenablogだよ

FTPクライアントを作ってみよう(7)

前回(id:seiunsky:20061125:1164490668)

ネットワークが確立しているかの確認方法

NetworkStream.DataAvailableだけでネットワーク上に取得できるデータがまだあるかを確認するのではうまくいかないということを前回書いた。
で、結局こうすることで解決した。

do {
    size = nwStream.Read(buff, 0, uff.Length);
    sb.Append(Encoding.GetEncoding("EUC-JP").GetString(buff, 0, size));
} while (size != 0 || nwStream.DataAvailable);

ちょっとわかりにくいかもしれないけど、まずNetWorkStreamのReadメソッドでデータを取得する。その際、Readメソッドは読み取ったデータのサイズを戻り値として返す。
なので、その返ってきた値が0で無い時(=その時はまだ取得したデータがあった)にはループを続行する、という方法に変えてみた。

このやり方が果たして安全な方法なのかよくわからないが

少なくとも世の中のサンプルソースでは役に立たないのでなんとか違う方法を考えるしかなかったのであった。
例:世の中にあるサンプルソース(以下のURLの使用例を参照)
http://msdn2.microsoft.com/ja-jp/library/system.net.sockets.networkstream.read(VS.80).aspx
他にもっとスマートなやり方を知っている人が居たら教えてください(そもそもNetworkStreamを使わない方法でも可)。