HTTP 协议 响应头没有 长度 Content-Length,一般怎没解决?

Mycro 2005-06-02 10:18:57
我要判断,什么时候 接受完毕;

一般是不能用 实际长度 与 要求长度作比较 来确定 已经接受完毕了;

因为,http 分多包 来 发送,

最简单的例子,一般情况下, 响应头,就是单独发送的;

文件实体,是不是一次发送的?

可以这样么?

inr rc = recv(sock,buf,1024,0);
while(rc == 1024 )
{
inr rc = recv(sock,buf,1024,0);
}


来判断么?

我现在使用接受超时来解决的,但这个办法,是 太不幽雅了。。。。

那么IE是怎么做的呢?
...全文
5972 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hendy_So 2005-06-07
  • 打赏
  • 举报
回复
并不是所有的的HTTP文件都会返回Content-Length,有的是所谓的chunked,客户端不知道文件的大小,只能不停地接收,只到没有数据了,即recv返回0或错误。
9731boy 2005-06-07
  • 打赏
  • 举报
回复
一般来说.
body里的数据并不是http头部所必须的.
只有读取post数据时才有用.
如果没有 Content-Length 可以拒绝接受的啊.
菲斯可儿 2005-06-07
  • 打赏
  • 举报
回复
不太了解,至少可以通过ip头来得到相关信息。
Mycro 2005-06-07
  • 打赏
  • 举报
回复
谢谢,不过我没说清楚,

我是响应头里没有 Content-Length 域,

只是我拿不到正文的长度;

只那头的话,一般这样就行了:

inr rc = recv(sock,buf,1024,0);

因为头的最大长度就是 1024
并且,往往 头 是单独发送的,于是一次就把头拿来了。。。
huxzjqhh 2005-06-07
  • 打赏
  • 举报
回复

while(1)
{
len=recv();
if(len==0) break;
}

试试吧

Mycro 2005-06-07
  • 打赏
  • 举报
回复
看来不行就得超时了,才行。。。

呵呵,谢谢大家;
takbj 2005-06-02
  • 打赏
  • 举报
回复
可以
还有一个"\r\n\r\n",比如一个响应头结束就会发送一个"\r\n\r\n".
std::string strBuf;
int iFintRet, rc = recv(sock,buf,1024,0);
while(rc == 1024 )
{
rc = recv(sock,buf,1024,0);
strBuf = buf;
iFintRet=strBuf.Find("\r\n\r\n");
if(iFintRet>0){
//结束……
}
}

18,363

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧