Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 套接字类:在windows上接收数据时是否继续附加其他数据?_C++_Sockets - Fatal编程技术网

C++ 套接字类:在windows上接收数据时是否继续附加其他数据?

C++ 套接字类:在windows上接收数据时是否继续附加其他数据?,c++,sockets,C++,Sockets,我最近编写了一个(脏的,但仍在工作的)套接字类,用于一个小型的用途。 到目前为止,该类本身工作正常,只是接收数据时会不断追加额外的数据,但仅在windows上。附加数据通常类似于(用随机数替换$RANDOM_number): 因此,接收到的数据如下所示: received from client: Hello server!TA,guid=dba2ba7f040f9ddb8d7107d800000027 而实际输出应为: received from client: Hello server!

我最近编写了一个(脏的,但仍在工作的)套接字类,用于一个小型的用途。 到目前为止,该类本身工作正常,只是接收数据时会不断追加额外的数据,但仅在windows上。附加数据通常类似于(用随机数替换
$RANDOM_number
):

因此,接收到的数据如下所示:

received from client: Hello server!TA,guid=dba2ba7f040f9ddb8d7107d800000027
而实际输出应为:

received from client: Hello server!
我已经按照中的说明移植了BSD套接字用法。

这在Linux(或任何Unice)上都不会发生。字符串正确地以null结尾,特别是因为我使用的是
std::string

  • 套接字类:[]
  • client.cpp:[]
  • server.cpp:[]
我做错了什么?这些额外的数据来自哪里

buffer.reserve(maxlen);
buffer.reserve(maxlen);
n = this->readInto(&buffer[0], maxlen);
if(n < 0)
{
     throw Socket::ReadError("ERROR reading from socket");
}
result = &buffer[0];
n=此->读入(&buffer[0],maxlen); if(n<0) { 抛出套接字::ReadError(“从套接字读取错误”); } 结果=&缓冲区[0];

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

即使将
result=&buffer[0]
更改为
result.append(&buffer[0],maxlen)
,附加数据仍会不断出现……啊,是的。。。我知道我搞错了什么:-)谢谢:-)
buffer.reserve(maxlen);
n = this->readInto(&buffer[0], maxlen);
if(n < 0)
{
     throw Socket::ReadError("ERROR reading from socket");
}
result = &buffer[0];