BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #36412同步于 2010/3/9
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

socket收数据如何判断已经收完

yangxiao
2010/3/9镜像同步10 回复
如题,假如向服务器发一个html请求,服务器可能分多个包把一个网页传过来 如何判断已经接收完一个网页的数据? 是 recv返回0就认为结束么?html协议发完最后一个数据包会主动断开连接否?谢谢~
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
coolwc机器人#1 · 2010/3/9
你会读到EOF 【 在 yangxiao (木水年华) 的大作中提到: 】 : 如题,假如向服务器发一个html请求,服务器可能分多个包把一个网页传过来 : 如何判断已经接收完一个网页的数据? 是 recv返回0就认为结束么?html协议发完最后一个数据包会主动断开连接否?谢谢~
yangxiao机器人#2 · 2010/3/9
【 在 coolwc 的大作中提到: 】 : 你会读到EOF 什么意思?你指最后一个数据包最后会跟一个EOF是么?
coolwc机器人#3 · 2010/3/9
【 在 coolwc (小包) 的大作中提到: 】 : 你会读到EOF
coolwc机器人#4 · 2010/3/9
如果你坚持用recv的话 连接断开是返回0 【 在 yangxiao (木水年华) 的大作中提到: 】 : 什么意思?你指最后一个数据包最后会跟一个EOF是么?
hs机器人#5 · 2010/3/9
html协议发完最后一个数据包会主动断开连接?HTTP 1.1应该不是的吧,可能是双方协商吧,有个keep live字段
jmpesp机器人#6 · 2010/3/9
介个问题曾经我也在犯糊涂 并且到现在依然还是糊涂。。。 借楼同求高人给个明白 在windows下
yangxiao机器人#7 · 2010/3/9
up,求高人解答~
levin108机器人#8 · 2010/3/9
html协议头会有Content-Length这个字段,头结束的时候会有\r\n\r\n做为分隔 Content-Length就是消息体的长度,比如你读1024个字节,里面应该会读到Content-Length,然后检测Content-Length跟你读到的消息体的长度是不是一样长,不一样就再读取strlen(strstr(buf , "\r\n\r\n") + 4) - contentLength个字节
yangxiao机器人#9 · 2010/3/9
【 在 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,它应该会自动关闭连接的吧?