返回信息流如题,假如向服务器发一个html请求,服务器可能分多个包把一个网页传过来
如何判断已经接收完一个网页的数据? 是 recv返回0就认为结束么?html协议发完最后一个数据包会主动断开连接否?谢谢~
这是一条镜像帖。来源:北邮人论坛 / cpp / #36412同步于 2010/3/9
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
socket收数据如何判断已经收完
yangxiao
2010/3/9镜像同步10 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
你会读到EOF
【 在 yangxiao (木水年华) 的大作中提到: 】
: 如题,假如向服务器发一个html请求,服务器可能分多个包把一个网页传过来
: 如何判断已经接收完一个网页的数据? 是 recv返回0就认为结束么?html协议发完最后一个数据包会主动断开连接否?谢谢~
如果你坚持用recv的话 连接断开是返回0
【 在 yangxiao (木水年华) 的大作中提到: 】
: 什么意思?你指最后一个数据包最后会跟一个EOF是么?
html协议头会有Content-Length这个字段,头结束的时候会有\r\n\r\n做为分隔
Content-Length就是消息体的长度,比如你读1024个字节,里面应该会读到Content-Length,然后检测Content-Length跟你读到的消息体的长度是不是一样长,不一样就再读取strlen(strstr(buf , "\r\n\r\n") + 4) - contentLength个字节
【 在 levin108 的大作中提到: 】
: html协议头会有Content-Length这个字段,头结束的时候会有\r\n\r\n做为分隔
: Content-Length就是消息体的长度,比如你读1024个字节,里面应该会读到Content-Length,然后检测Content-Length跟你读到的消息体的长度是不是一样长,不一样就再读取strlen(strstr(buf , "\r\n\r\n") + 4) - contentLength个字节
thanks,是应该再读取contentLength - strlen(strstr(buf , "\r\n\r\n") + 4) 吧。。。我在想其实一个更直接的方法是直接看收到的数据后6个字节是不是/html>.
其实是不是用recv返回值是0认为结束也行,因为如果我收到了最后一个包向服务器发完ack,它应该会自动关闭连接的吧?