소켓 프로그래밍 하다가 안돼는 부분이 있어서 질문 올렸습니다.
SOCKET Socket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
struct hostent *host;
host = gethostbyname("http://www.daum.net");
if (host == NULL) {
dwError = WSAGetLastError();
if (dwError != 0) {
if (dwError == WSAHOST_NOT_FOUND) {
printf("Host not found\n");
//return 1;
} else if (dwError == WSANO_DATA) {
printf("No data record found\n");
//return 1;
} else {
printf("Function failed with error: %ld\n", dwError);
// return 1;
}
}
}
SOCKADDR_IN SockAddr;
SockAddr.sin_port=htons(80);
SockAddr.sin_family=AF_INET;
SockAddr.sin_addr.s_addr = *((unsigned long*)host->h_addr);
cout << "Connecting...\n";
if(connect(Socket,(SOCKADDR*)(&SockAddr),sizeof(SockAddr)) != 0){
cout << "Could not connect";
system("pause");
return 1;
}
cout << "Connected.\n";
char *tmp_header = "Get/HTTP/1.1\r\n"
"Host : http://www.daum.net\r\n"
"Accept: text/plain \r\n"
"User-Agent: Mozilla/4.0(compatible; MSIE 5.0; Windows NT)\r\n"
"Accept-langugae: ko\r\n"
"Content-type: text/html"
"Connection: Close\r\n\r\n";
send(Socket,tmp_header, strlen(tmp_header),0);
위와같이 프로그래밍을 했는데, http://wwww.daum.net 웹페이지를 못 긁어 오는데 어떤것이 잘못된걸까요??
조언 부탁드립니다.
참고하세요 wget 을 이용한 debug 정보입니다.
wget -d http://www.daum.net
---request begin---
GET / HTTP/1.0
User-Agent: Wget/1.12 (linux-gnu)
Accept: */*
Host: www.daum.net
Connection: Keep-Alive
---request end---
HTTP request sent, awaiting response...
---response begin---
HTTP/1.1 200 OK
Date: Thu, 26 Sep 2013 06:26:25 GMT
X-UA-Compatible: IE=edge
Expires: Sat, 01, Jan 1970 22:00:00 GMT
Pragma: no-cache
Cache-Control: no-cache, no-store, must-revalidate
P3P: CP="ALL DSP COR MON LAW IVDi HIS IVAi DELi SAMi OUR LEG PHY UNI ONL DEM STA INT NAV PUR FIN OTC GOV"
Content-Type: text/html;charset=UTF-8
Content-Language: en-US
Vary: Accept-Encoding
X-UA-Device-Type: pc
Connection: close
---response end---
200 OK
Length: unspecified [text/html]
Saving to: `index.html'
---------------------------------------------
git init
git add .
git commit -am "project init"
---------------------------------------------
윈속 쓰시는 모양인데 WSAStartup 이던가 뭐
윈속 쓰시는 모양인데 WSAStartup 이던가 뭐 이런것도 안보이고.. recv하는 부분도 보이지 않으니 약식 코드인것 같은데, 약식코드를 눈으로만 검토해서는 별 문제 없어 보입니다.
구체적으로 어디까지 진행되었고 그때 에러는 뭐인지 정도는 적어주셔야 도와드릴려고 해도 도와드릴 수 있습니다...
host =
host = gethostbyname("http://www.daum.net");host = gethostbyname("www.daum.net");
gethostbyname()에는 URL을 주는 것이 아니고 서버의 도메인명을 주어야 합니다.
URL은 웹서버와의 TCP 접속이 이뤄지고 난 다음 소켓을 통해 전송하는 것이고요.
이것부터 고치고 나서 그 다음 오류메시지를 하나씩 해결해 보시기 바랍니다.
틀린 부분이 많이 있네요.
등등...
www.gilgil.net
http://로 시작하는거는 가져올수 없나요??
http://로 시작하는거는 가져올수 없나요??
패킷을 잡아 보세요.
음... URL과 Host를 헷갈려 하시는 것 같군요.
URL은 다음과 같은 format을 가집니다(출처 : http://en.wikipedia.org/wiki/Uniform_resource_locator ).
URL format에서 "domain"이라고 하는 부분을 다른 말고 "host"라고 하는 것입니다.
다시 말해서
"http://www.daum.net"은 URL이고
"www.daum.net"은 host라는 얘기입니다.
말로 설명하는 것보다는 직접 패킷을 잡아 보시는 것이 좋을 듯 합니다.
웹브라우저에서 http://www.daum.net 에 들어 가 보고 송수신되는 패킷을 wireshark로 잡아서 분석해 보세요.
www.gilgil.net
댓글 달기