我编写了一个简单的程序,它使用 unix 套接字从服务器下载 html 文件。
我使用 write() 发送“Get /index.html Host: * ”消息,然后使用 while 循环读取()响应。一切顺利,但最后一个返回 0 的 read() 需要很长时间才能返回。有什么想法可以更正代码,这样我就不需要等待这个特殊的时间了吗?或者这怎么会发生?
sprintf(cmdstr,"%s %s %s\r\nHOST:%s\r\n\r\n",METHOD,place,VERSION,host);
cmdlen = strlen(cmdstr);
if (write(sockfd,cmdstr,cmdlen) != cmdlen) {
perror("write cmd error");
return ;
}
while ((n = read(sockfd,read_data,BUFSIZE)) > 0) {
read_data[n] = 0;
p = read_data;
if (filep == NULL) {
if (filep = fopen(filename,"w")) == NULL) {
perror("fopen ");
return;
}
p = strstr(read_data,"\r\n\r\n");
p += 4;
}
fputs(p,filep);
}
printf ("%s download completed.\n",filename);