【发布时间】:2018-04-13 16:44:01
【问题描述】:
我正在练习套接字编程,尝试发送一个 http 请求,然后从服务器接收一些 SOCK_STREAM 数据。这个问题是关于接收过程的。
方法 1:我目前的方法只是使用 while 循环
while((received = recv(sockfd, response, BUFSIZ, 0)) > 0) {
//process response
}
if(received < 0) {
perror("Error receiving data!\n");
}
基本上,进行recv() 调用,直到它完成/关闭(返回 0 作为 )或遇到错误。
但是,我很少看到有人这样做,SO 上的大多数人都建议使用长度指示器,即here 和here。不知道我是否错过了上述方法。
方法2:长度指示方法
好的,关于最优选的长度指示器方法,如何获得整个recv消息的总长度?
举例如下
这是我检索到的 HTTP 标头,有一个名为 Content-Length 的字段。是整条消息的长度(header + body = 468)吗?
【问题讨论】:
标签: sockets tcp http-headers