gpt4 book ai didi

c++ - 当套接字中发送速度太快时连接缓冲区

转载 作者:行者123 更新时间:2023-11-30 05:24:01 24 4
gpt4 key购买 nike

我有一个套接字服务器,每 500 毫秒接收一次 XML 文件,有时将多个文件连接为一个文件时会出错。

do
{
char* buf = (char*)MALLOCZ(IP_BUF_SZ);
chrs_read = recv(sockfd, buf, IP_BUF_SZ, 0);

if (chrs_read > 0)
sBuffer.append(buf, chrs_read);

FREE(buf);
buf = NULL;
}
while (chrs_read > 0);

因此,有时 chrs_read 不会返回 -1 以停止接收并保存文件以开始新的接收。我是否忘记了套接字中的一些配置——默认情况下它是异步和非阻塞的——我应该继续使用这种方式吗?提前谢谢你

最佳答案

问题是所有文件都通过同一个连接发送,它们之间没有分隔符。当经常发送文件并且网络中存在一些延迟时,您无法知道文件在哪里结束以及新文件从哪里开始。

解决方案:

  • 在文件之间插入一个分隔符,这样您就可以在收到分隔符时关闭文件,然后打开一个新文件。请注意,分隔符可以在 buf 内的任何位置接收,或者如果分隔符长于一个字节,它甚至可以在一次 recv 调用中部分接收,并且其余部分在下一个 recv 调用中。
  • 在发送端,发送文件后关闭连接,并为新文件打开一个新连接。

关于c++ - 当套接字中发送速度太快时连接缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38897700/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com