NetworkStream.Read () создает повторяющиеся байты при чтении в цикле - PullRequest
0 голосов
/ 29 апреля 2018

Я читаю все DataAvailable из NetworkStream в цикле while, и в каждом цикле я читаю доступные данные с определенным chunk размером:

TcpClient client = new TcpClient("server address", 23);
NetworkStream stream = client.GetStream();

byte[] data = new byte[2048]; // read in chunks of 2KB
int bytesRead;
string output = "";

do
{
    bytesRead = stream.Read(data, 0, data.Length);
    output += System.Text.Encoding.ASCII.GetString(data, 0, data.Length);
} while (stream.DataAvailable);

return output;

Проблема в выводе. Я получаю несколько случайных текстов из середины полученных байтов, я имею в виду нечто похожее на это:

1 A
2 B
3 C
4 D
5 E
6 F
7 G
8 H
9 I
10 J //here my output must finish but random bytes from middle append to the end:
3 C //repetitive bytes
4 D //repetitive bytes
5 E //repetitive bytes

Что меня смущает, так это то, что если я увеличу размер чанка с 2048 до 3072, эта проблема не произойдет.

Я также проследил TcpClient.Available с точкой останова в каждом цикле:

First cycle -> 4495
Second cycle -> 2447
Third cycle -> 399
Forth cycle -> 0

1 Ответ

0 голосов
/ 29 апреля 2018

Я бы подумал, что это:

output += System.Text.Encoding.ASCII.GetString(data, 0, data.Length);

должно быть так:

output += System.Text.Encoding.ASCII.GetString(data, 0, bytesRead);

Это гарантирует, что в выходные данные будут включены только данные, считанные в этом конкретном случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...