调用recv()函数时接收多个html内容?
我正在编写一个http客户端来从网站接收html 这就是代码:我只是添加了一段代码,其中包含与套接字相关的逻辑,因此缺少字符串(char[])和函数的初始化 在接收html时,我得到了多个html内容,在html代码完成后,我再次得到了相同html的某些部分,但大部分内容都不完整,似乎服务器正在发送多个文件 大概是这样的:调用recv()函数时接收多个html内容?,c,sockets,get,C,Sockets,Get,我正在编写一个http客户端来从网站接收html 这就是代码:我只是添加了一段代码,其中包含与套接字相关的逻辑,因此缺少字符串(char[])和函数的初始化 在接收html时,我得到了多个html内容,在html代码完成后,我再次得到了相同html的某些部分,但大部分内容都不完整,似乎服务器正在发送多个文件 大概是这样的: <!-- header --> <html> something </html> <!-- header --> <ht
<!-- header -->
<html> something </html>
<!-- header -->
<html> someth
某物
某些
我认为这是由于连续调用recv()
函数来获取所需的所有数据。正如您所看到的,我在while循环中设置了一个条件,当数据到达末尾时自动停止接收数据,但不会停止
我不知道这是否是预期的,我必须设置一些其他逻辑来停止对recv()
的更多调用,如果是,那么是什么逻辑。
是不是我必须写一些东西来格式化数据,使其只包含一个html正文,就像在找到
标记后删除所有内容一样
到目前为止,我找到的所有帖子都解释说,预期不会一次收到所有数据,因此我不得不多次调用
recv()
。但它们似乎没有说要接收多个html正文并编写一些逻辑来停止。TCP是一种基于流的协议,这意味着一次读取可以对应多条消息或部分消息
您需要读取内容长度标题,以了解应该读取多少字节。如果你碰巧得到了比你要求的更多的字节,你需要缓冲这些字节,并将它们保存到你阅读的下一封邮件中。你能解释一下我如何读取内容长度标题吗?我想有时这些内容长度标题也不见了(如果我错了,我不确定是否更正)。@shobhit阅读后,在缓冲区中搜索“内容长度”使用
strstr
。如果标题不在那里,则查找标题的结尾(一个双换行符)并阅读直到看到
。好的,您的意思是我得到的结果是预期的,我必须编辑我的文件(输出)以使用我想要的内容。@shobhit Correct
<!-- header -->
<html> something </html>
<!-- header -->
<html> someth