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

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

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

1行読出(ReadLine)で行の文字数制限はできない?


(過去ログ 8 を表示中)

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

■8600 / inTopicNo.1)  1行読出(ReadLine)で行の文字数制限はできない?
  
□投稿者/ にわ 二等兵(1回)-(2006/11/30(Thu) 15:12:23)

分類:[C#] 


分類:[C#] 

2006/11/30(Thu) 15:21:48 編集(投稿者)

.NETのストリーム1行読出(ReadLine)で、
1行の文字数制限する方法はないでしょうか?
-
C#.NETで、TCP接続して来たクライアントから、
ASCII文字列を1行ずつ読み込んで処理する、
簡単なプログラムを作ろうとしています。
よく見るサンプルは以下のようなものです。
-
TcpListener tcpListener = new TcpListener(IPAddress.Loopback, 12345);
TcpClient tcpClient = tcpListener.AcceptTcpClient();
NetworkStream networkStream = tcpClient.GetStream();
StreamReader reader = new StreamReader(networkStream, Encoding.ASCII);
string line;
while ((line = reader.ReadLine()) != NULL) {
// lineを処理する
}
tcpClient.Close();
-
ただ、邪悪な接続元が、改行コードを含まない長いデータを送って来た場合、
MSDNを見ると、ReadLineはメモリ枯渇するまで返って来なさそうなので、
外から簡単にシステム異常を起こせそうで怖いです。
Cのfgets()みたいに、1行の文字数制限がかけられれば、
そうなる前にソケット切断して拒否しちゃいたいと考えています。
-
このような1行の文字数制限をしたい場合、ReadLineじゃなくてReadを使い、
自前でバッファリング&改行コード検索するしかないのでしょうか?
大したコード量じゃないとは思うのですが、
豊富なクラスライブラリを持つC#のこと。
もし適切な方法があるのなら、それを使いたいと思いました。
-
何かご存知の方がいらしたらよろしくお願いします。


0
引用返信 編集キー/
■8601 / inTopicNo.2)  Re[1]: 1行読出(ReadLine)で行の文字数制限はできない?
□投稿者/ ぽぴ王子 曹長(89回)-(2006/11/30(Thu) 16:10:28)
ぽぴ王子 さんの Web サイト

分類:[C#] 

No8600に返信(にわさんの記事)

私の場合は。あくまで私の場合ですが。

> 大したコード量じゃないとは思うのですが、
> 豊富なクラスライブラリを持つC#のこと。
> もし適切な方法があるのなら、それを使いたいと思いました。

まずはMSDNの該当しそうなコントロールなりアセンブリなりの情報をそれこそデ
ィスプレイを魔貫光殺砲で穴が開くほど調べます。
目からビームとかでもいいですけど。
それでも「ない」という結論に達した場合は、仕方がないと思ってさっさと作っ
てしまいます。
むしろ先に作ってから「あーこんな便利なものがあったのかああ」と言いつつ自
分のコードを破棄して.NET謹製のメソッドに置き換えることもあります。

というか、質問する時間があるなら自分で作りますよそんなの。
質問して回答を待ってる間ってヒマだもん。

0
引用返信 編集キー/
■8617 / inTopicNo.3)  Re[2]: 1行読出(ReadLine)で行の文字数制限はできない?
□投稿者/ にわ 二等兵(2回)-(2006/11/30(Thu) 20:32:04)

分類:[C#] 

ぽぴ王子さん、レスポンスありがとうございます。

MSDNは一通り調べたつもりなのですが、見つかりませんでした。
でも、サーバアプリなどで普通に使われそうな処理なのに、
本当にこんな安全でないメソッドしか用意されてないのか疑問に思い、
調べ方が悪いのかも知れないと思って、質問させていただきました。

現在はとりあえずReadLineを使って動かしつつ、他の部分を作成中です。
平行してもう少しMSDNなどを調べながら、最後まで見つからなければ、
あきらめて自作してReadLineを置き換えることになると思います。


0
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -