Почему чтение моего входного потока tcp приводит к заполнению байтового массива только нулевым символом? - PullRequest
0 голосов
/ 10 июня 2010

Я не привык к C # (я обычно делаю C ++) и пытаюсь отладить приложение, которое не принадлежит мне вообще.

Мое приложение пытается прочитать большую строку из сокета TCP. Скажем, около 140 000 символов. И это не удается. Позвольте мне объяснить, как.

Мой код здесь (на самом деле внутри цикла)

            System.IO.Stream inputStream;

            //...

            // Loop code:
            buffer            = new byte[2];
            readByteForLength = inputStream.Read(buffer, 0, 2);

Оказывается, что Read () может корректно заполнить буферный массив до точки, где он заполняет его NULL-символами вместо допустимых значений. И он возвращает 2, как это было бы в правильном случае.

У вас есть идея, почему такие NULL символы?

Пакет tcp все еще находится в сети, когда я пытаюсь прочитать больше моих данных? Есть ли предел для inputStream, прежде чем он будет вести себя неправильно?

Обновление: Кстати, это приводит к той же проблеме:

        System.IO.StreamReader sr = new StreamReader(inputStream);
        string s = sr.ReadToEnd();

        File.WriteAllText(@"c:\temp\toto.txt", s);

На самом деле файл toto останавливается именно там, где я сталкиваюсь с проблемой в первой версии моего кода, хотя он немного длиннее, потому что остальная часть строки заполняется символами NULL, почти до 400 000!

1 Ответ

1 голос
/ 10 июня 2010

Единственная разумная идея - у вас действительно есть нули во входных данных.

Попробуйте перехватить связь с эфирным.

Кстати: выделение ОЗУ для каждой полученной части данных может быть неправильной практикой.

...