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