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

わんくま同盟

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

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


(過去ログ 8 を表示中)
■8600 / )  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
返信 編集キー/


管理者用

- Child Tree -