これが私が作成したものです:StreamReader
TcpClient
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;
}
total
新しい行が「\r\ n」によって作成されると仮定すると、読み取る新しい行ごとに、に2の長さが追加されます。これは、データに「\ n」が含まれている場合を除いて、ほとんどすべての場合に機能します。「\ n」は、「\ r\n」と区別する方法がわかりません。このような場合、実際よりも多くの読み取りが行われたと見なされるため、チャンクの読み取りが短くなりPacketAnalyzer.parseHex()
、エラーが発生します。