基本上,我正在向某个URL发送GET请求,并使用recv()
接收结果。我有一个while循环,可以从recv()
的缓冲区中获取文件的一部分。
void send_GET(int client, char *url) {
char buf[BUF_SIZE] = {0};
sprintf(buf, "GET / HTTP/1.1\r\nHost: %s\r\n\r\n", url);
send(client, buf, strlen(buf), 0);
}
int main() {
//sock is a socket()
send_GET(sock, url);
while ((numbytes = recv(sock, buf, BUF_SIZE - 1, 0)) > 0) {
buf[BUF_SIZE] = '\0';
printf("%s", buf);
}
printf("\n");
close(sock);
return 0;
}
一旦我从请求的页面中获取了整个HTML,recv()
进程就会变得空闲。我知道close(sock)
将结束它,但是我不知道如何弄清楚该文件何时结束。我不知道如何退出while循环,因为numbytes永远不等于0或小于0。一旦获得最后一个块,它就坐下来并处于空闲状态。
如何知道何时收到我请求的文件结尾?