C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: StreamReaderについて


(過去ログ 90 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■53976 / inTopicNo.1)  StreamReaderについて
  
□投稿者/ San (1回)-(2010/10/01(Fri) 13:11:52)

分類:[.NET 全般] 

ネットワークストリームからデータを取得するプログラムを作っています。
相手側からは連続した文字列データが送信されてきますので、こちら側では下記を
無限ループ内に記述してデータを受信しています。

private TcpClient client;

StreamReader reader = new StreamReader(client.GetStream(), new UTF8Encoding());
String msg = reader.ReadLine();

ここで問題なのですが、相手側はこちらの受信開始または完了を意識せず、ひたすらデータを
送り続けてきます。
このコーディングですと、受信の際にデータの取りこぼしが発生しています。

また、次のようにもしてみましたが、結果は同じでした。

StreamReader reader = new StreamReader(client.GetStream(), new UTF8Encoding());
//String msg = reader.ReadLine();
String msg = "";
int c = reader.Read();
if (c == -1)
return null;

while (c != '\n')
{
msg += (char)c;
c = reader.Read();
}


そもそもStreamReaderを使っていてはだめなのでしょうか。
取りこぼさないように受信できる方法を教えて下さい。

引用返信 編集キー/
■53985 / inTopicNo.2)  Re[1]: StreamReaderについて
□投稿者/ shu (81回)-(2010/10/01(Fri) 14:48:55)
No53976 (San さん) に返信
ストリームの終了条件を正しく判定すればStreamReaderでも大丈夫だと思います。
引用返信 編集キー/
■53986 / inTopicNo.3)  Re[2]: StreamReaderについて
□投稿者/ San (2回)-(2010/10/01(Fri) 14:58:46)
shuさん、返信ありがとうございます。

ストリームの終了条件は末尾に'\n'としています。
2つ目の方法がそれにあたるのですが、これでも取りこぼしています。

終了条件の意味はこれでよかったでしょうか?

引用返信 編集キー/
■53987 / inTopicNo.4)  Re[3]: StreamReaderについて
□投稿者/ shu (82回)-(2010/10/01(Fri) 15:03:09)
No53986 (San さん) に返信
> shuさん、返信ありがとうございます。
>
> ストリームの終了条件は末尾に'\n'としています。
> 2つ目の方法がそれにあたるのですが、これでも取りこぼしています。
>
> 終了条件の意味はこれでよかったでしょうか?
>
そうするとひたすらデータを送り続けるという条件と合わないかと思います。
データが送り続けられる限り読み続けないと取りこぼします。\nはとりあえずの区切りには
なりそこで1処理行うのはいいと思いますが、継続して読む必要があるのではないでしょうか。
引用返信 編集キー/
■53989 / inTopicNo.5)  Re[4]: StreamReaderについて
□投稿者/ San (3回)-(2010/10/01(Fri) 16:16:14)
shuさん、返信有難うございます。

終了条件をストリームが閉じられた時にすることで取りこぼさないようになりました。
お付き合い頂きありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -