分類:[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#のこと。
もし適切な方法があるのなら、それを使いたいと思いました。
-
何かご存知の方がいらしたらよろしくお願いします。