【发布时间】:2021-02-21 22:23:42
【问题描述】:
我在所有消息的末尾添加了一个分隔符,这样我就知道何时到达了消息的末尾。一旦我的消息超过缓冲区的指定大小,并且我必须第二次从套接字读取,就会发生奇怪的事情。例如,一个随机的 '\n' 字符会在我的消息中随机出现在某个地方,并且这只发生在我必须多次从同一个套接字读取时,因为消息大于缓冲区的大小。下面的代码有什么缺陷吗?
我正在使用 Unix 套接字头文件。
std::string bufferStr;
// check to see if the delimiter is in the buffer string
while(bufferStr.find(DELIM)==std::string::npos)
{
valread = read(sock,buffer,1024);
bufferStr+=std::string(buffer);
}
【问题讨论】:
-
buffer的大小是多少?是1024吗? -
@tadman
1024字节 -
有很多代码没有显示,这可能是问题的根源。进行一些调试以缩小问题所在。
标签: c++ sockets network-programming