Класс сокета: получение данных в окнах продолжает добавлять дополнительные данные? - PullRequest
0 голосов
/ 02 января 2011

Я недавно написал (грязный, но работающий) класс Socket для минимальной цели. Пока что сам класс работает нормально, за исключением того, что при получении данных будут добавляться дополнительные данные, однако, только в окнах. Дополнительные данные обычно что-то вроде (замените $RANDOM_NUMBERS случайными числами):

 TA,guid=$RANDOM_NUMBERS

Полученные данные будут выглядеть так:

received from client: Hello server!TA,guid=dba2ba7f040f9ddb8d7107d800000027

В то время как фактический результат должен быть:

received from client: Hello server!

Я перенес Использование сокета BSD, как описано в MSDN .

Этого не происходит в Linux (или любых других приложениях). Строки правильно заканчиваются нулем, тем более что я использую std::string.

Что я делаю не так? Откуда поступают эти дополнительные данные?

1 Ответ

0 голосов
/ 02 января 2011
buffer.reserve(maxlen);
n = this->readInto(&buffer[0], maxlen);
if(n < 0)
{
     throw Socket::ReadError("ERROR reading from socket");
}
result = &buffer[0];

result не знает, сколько значащих байтов помещено в буфер.Таким образом, он продолжает читать байты, пока не встретит ноль.Вот как мусор попадает в ваш вывод.

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