- 论坛徽章:
- 0
|
下面为一段学习测试程序,使用socket下载webserver上的gif文件,然后保存在本地。
现在程序已经能够把server上的文件保存在本地,而且字节也相等(我是直接查看文件属性看的)。
问题是:下载的gif文件不能正确显示,不能显示为一张图片。
测试环境:
------------------
gcc version 3.4.2(mingw-special)
windows xp
--------------------
int main(int ac,char *av[])
{
char pack[1024] = {0} ;
sprintf(pack,"GET /images/dragon.gif HTTP/1.1\nHost: localhost\nAccept: */*\nReferer: http://127.0.0.1\nUser-Agent: Mozilla/4.0 (compatible; MSIE 5.00; Windows 9 \nRange: bytes=0-\nPragma: no-cache\nCache-Control: no-cache\n\n") ;
int server ;
server = socket(AF_INET,SOCK_STREAM,0) ;
struct sockaddr_in server_addr ;
server_addr.sin_family = AF_INET ;
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1") ;
unsigned int port ;
port = 80 ;
server_addr.sin_port = htons(port) ;
connect(server,(struct sockaddr*)&server_addr,sizeof(server_addr)) ;
send(server,pack,strlen(pack),0) ;
char buf[267017] = {0} ;
char tbuf[1024] = {0} ;
memset(buf,'\0',sizeof(buf));
memset(buf,'\0',sizeof(tbuf));
int i ;
i = 0 ;
char * body = NULL ;
int t ;
t = 0 ;
//this sentence is very important to receive the data complete
do
{
t = recv(server,tbuf,sizeof(tbuf),0) ;
strcat(buf,tbuf) ;
i = t + i ;
}
while(t>0) ;
printf("i value:%d\n",i) ;
body=strstr(buf,"\r\n\r\n")+4; //detech and drop http response header
i=i-(body-buf);
/*/kendo,debug
printf("\n%s\n",buf) ;
//*/
FILE* f = NULL ;
f = fopen("shex.gif","wb+") ;
fwrite(body,sizeof(char),i,f) ;
fflush(f) ;
fclose(f) ;
printf("i value:%d\n",i) ;
close(server) ;
return 0 ;
} |
[ 本帖最后由 kendotom 于 2008-6-17 14:48 编辑 ] |
|