我最近写了一个(脏的,但正在工作的)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
。
我做错了什么?这些额外数据来自哪里?
答案 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
不知道缓冲区中放置了多少有意义的字节。所以它一直在读取字节,直到它遇到零。这就是垃圾进入你输出的方式。