- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我有以下问题:这是代码块:
void get_all_buf(int sock, std::string & inStr) {
int n = 1;
char c;
char temp[1024*1024];
bzero(temp, sizeof(temp));
n = recv(sock, temp, sizeof(temp), 0);
inStr = temp;
};
但有时 recv
不返回整个数据(数据长度总是小于 sizeof(temp)
),只返回它的一部分。写端总是向我发送完整数据(我用嗅探器得到它)。有什么关系?谢谢。
P.S. 我知道,礼貌建议我查看n
( if (n < 0) perror ("error while receiving data")
),但现在没关系 - 这不是我的问题的原因。
P.S.2 我忘了 - 它会阻塞套接字。
最佳答案
TCP 标准允许对数据包进行分段。实际上,对于几百字节左右的小数据包,这种情况不会发生,但是 1 兆字节的数据几乎肯定会分片。
其次,当您说嗅探器说所有数据都已发送时,是一个数据包还是多个数据包?
良好的网络编程实践要求您不要假设消息以单一 block 的形式到达。两个连续的消息可以作为一个数据包到达(理论上但几乎从不在实践中),即使它们以多个数据包到达也可以作为单次读取来读取。一条消息可能会分成多个数据包,它们可能不会同时全部到达,这可能就是您所看到的情况。
你的程序应该缓冲所有的读取,并有一种机制来确定整个消息何时到达,要么通过定界符(例如,用 CRLFCRLF 定界的 HTTP header ),要么通过字节数(例如,HTTP 正文,其中长度为在 header 中指定)或关闭连接以指示数据结束(例如,当 header 中未指定内容长度时的 HTTP 正文)。可能还有其他机制。
关于c++ - recv 有时接收不到全部数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4509570/
我正在尝试在 Windows 上运行的小于 1GB 的 VM 上设置 YouTrack 和 TeamCity。使用率将非常低(用户和请求)。这是一个 POC 环境,如果它有效,我可能会将它推送到一个超
所以我在尝试使用 FORFILES 解决这个问题时遇到了麻烦。我正在尝试获取不超过 4 天的文件。所以基本上少于 4 天。然而,这似乎不太可能,因为/d -4 获取所有 4 天或更早的项目。 以下是我
如何从下面的 events 表中选择小于 15 分钟前创建的 events? CREATE TABLE events ( created_at timestamp NOT NULL DEFAU
Google Analytics Realtime提供 rt:minutesAgo ,可以过滤查询。 然而,它是一个维度而不是一个度量标准,<=不能在过滤器中使用。 假设我想在最后 n 分钟内获得一些
iOS 核心数据 - 严重的应用程序错误 - 尝试插入 nil 你好, 我的应用程序实际上运行稳定,但在极少数情况下它会崩溃并显示此错误消息... 2019-04-02 20:48:52.437172
我想制作一个 html div 以快速向右移动(例如不到 1 秒)并消失。然后1秒后再次直接出现在这个过程最开始div的位置。此过程将由单击按钮并重复 10 次触发。 我试图在 CSS 中使用过渡属性
我发现使用 TimeTrigger 是 Windows 10 (UWP) 上计划后台任务的方式。但是看起来我们需要给出的最小数字是 15 分钟。只是想知道,即使我们安排它在接下来的 1 分钟内运行,警
我必须在 1 秒内在屏幕上打印 2^20 行整数 printf 不够快,还有其他易于使用的快速输出替代方法吗? 每一行只包含 1 个整数。 我要求它用于竞争性编程问题,我必须将其源代码提交给法官。 最
我是一名优秀的程序员,十分优秀!