http 바이너리 다운로드 문제 지금까지 짜집기한 소스입니다.
소스는 여기 게시판에서 찾아서 사용한것입니다. html 파일은 잘 전송되나 문제는 바이너리... 헤더처리를 해줘야 할것 같은데..@$#
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <stdio.h>
int main()
{
int sock;
int numbytes;
struct sockaddr_in addr;
struct hostent *host;
char *hostname="aaa.com";
char *port="80";
char header1[1024];
char *getenv(const char *NAME);
char buf[50];
FILE *fp;
int MAX;
snprintf(header1, 1024, "GET /aaa.tar.gz HTTP/1.1\r\n"
"Host: domain.com\r\n"
"User-Agent: update\r\n"
"Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n"
"Accept-Language: ko-kr,ko;q=0.8,en-us;q=0.5,en;q=0.3\r\n"
"Accept-Encoding: gzip,deflate\r\n"
"Keep-Alive: 300\r\n"
"Connection: close\r\n"
"\r\n");
if(!(host=gethostbyname(hostname))) {
fprintf(stderr, "2000\n");
exit(1);
}
sock=socket(PF_INET, SOCK_STREAM, 0);
if(sock==-1) {
//perror("socket() error!");
perror("2003");
exit(1);
}
memset(&addr, 0, sizeof(addr));
addr.sin_family=AF_INET;
addr.sin_addr=*(struct in_addr *)host->h_addr;
addr.sin_port=htons(atoi(port));
if(connect(sock, (struct sockaddr *)&addr, sizeof(addr))==-1) {
perror("2001");
exit(1);
}
if(write(sock, header1, sizeof(header1))==-1) {
perror("2002");
exit(1);
}
numbytes=0;
fp=fopen("aaa.tar.gz", "wb");
while(numbytes=read(sock, buf, sizeof(buf))!=0) {
fwrite(buf, sizeof(buf), numbytes, fp) ;
}
fclose(fp);
close(sock);
return 0;
}
위에것이 소스입니다. 처음에 http 서버에 write 하고 그 다음 header 를 받고 무언가 처리해줘야 할것 같은데.. 코딩을 어케해야하는지를 모르겠습니다.
아.. 참고로 rfc 문서를 읽으라는 말씀음... 사양해주세요..ㅡ.
..
댓글 달기