2

これが私が作成したものです:StreamReaderTcpClient

    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()、エラーが発生します。

4

1 に答える 1