StreamReader
とTcpClient
を使用して、チャンクされたHTTPパッケージを受信する関数を作成しました。 は、ここで私が作成したものです:それは読み込むごとに新しい行に対してStreamReader.ReadLine()は " r n"と " n"を区別する方法を教えてください。
private string recv()
{
Thread.Sleep(Config.ApplicationClient.WAIT_INTERVAL);
string result = String.Empty;
string line = reader.ReadLine();
result += line + "\n";
while (line.Length > 0)
{
line = reader.ReadLine();
result += line + "\n";
}
for (int size = -1, total = 0; size != 0; total = 0)
{
line = reader.ReadLine();
size = PacketAnalyzer.parseHex(line);
while (total < size)
{
line = reader.ReadLine();
result += line + "\n";
int i = encoding.GetBytes(line).Length;
total += i + 2; //this part assumes that line break is caused by "\r\n", which is not always the case
}
}
reader.DiscardBufferedData();
return result;
}
、それは新しい行が「\ r \ nの」によって作成されたと仮定し、2 total
への追加の長さを追加します。これは、データに「\ n」が含まれている場合を除き、ほとんどすべての場合に機能しますが、「\ r \ n」と区別する方法はわかりません。そのような場合には、実際にはそれ以上のものが読まれていると思うので、チャンクを短く読んでPacketAnalyzer.parseHex()
がエラーになることがあります。
StreamReaderを使用しないでください。ストリームから直接読み込みます。 – Ben
明確にする:読み込んだバイト数を追跡したいが、行が '\ n'または' \ n \ r 'で区切られているかどうかはわからない。 – Mario
@Marioはいあなたは正しいです –