套接字类:在Windows上接收数据会不断追加附加数据?

时间:2011-01-02 05:36:27

标签: c++ sockets

我最近写了一个(脏的,但正在工作的)Socket类用于最小的目的。 到目前为止,类本身工作正常,但接收数据将继续追加附加数据,但仅限于Windows。附加数据通常类似于(用随机数替换$RANDOM_NUMBERS):

 TA,guid=$RANDOM_NUMBERS

所以收到的数据看起来像是:

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

虽然实际输出应为:

received from client: Hello server!

移植了 BSD套接字使用情况,如MSDN所述。

这不会发生在Linux(或任何unices)上。字符串正确地以空值终止,特别是因为我正在使用std::string

我做错了什么?这些额外数据来自哪里?

1 个答案:

答案 0 :(得分:0)

buffer.reserve(maxlen);
n = this->readInto(&buffer[0], maxlen);
if(n < 0)
{
     throw Socket::ReadError("ERROR reading from socket");
}
result = &buffer[0];

result不知道缓冲区中放置了多少有意义的字节。所以它一直在读取字节,直到它遇到零。这就是垃圾进入你输出的方式。