소켓 프로그래밍 하다가 안돼는 부분이 있어서 질문 올렸습니다.

kin4olda의 이미지

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 웹페이지를 못 긁어 오는데 어떤것이 잘못된걸까요??

조언 부탁드립니다.

madman93의 이미지

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"
---------------------------------------------

klenui의 이미지

윈속 쓰시는 모양인데 WSAStartup 이던가 뭐 이런것도 안보이고.. recv하는 부분도 보이지 않으니 약식 코드인것 같은데, 약식코드를 눈으로만 검토해서는 별 문제 없어 보입니다.

구체적으로 어디까지 진행되었고 그때 에러는 뭐인지 정도는 적어주셔야 도와드릴려고 해도 도와드릴 수 있습니다...

chanik의 이미지

host = gethostbyname("http://www.daum.net");
host = gethostbyname("www.daum.net");

gethostbyname()에는 URL을 주는 것이 아니고 서버의 도메인명을 주어야 합니다.
URL은 웹서버와의 TCP 접속이 이뤄지고 난 다음 소켓을 통해 전송하는 것이고요.

이것부터 고치고 나서 그 다음 오류메시지를 하나씩 해결해 보시기 바랍니다.

gilgil의 이미지

char *tmp_header = "Get / HTTP/1.1\r\n"                          "/" 앞뒤로 스페이스가 들어 가야 함.
"Host : <a href="http://www.daum.net" rel="nofollow">http://www.daum.net</a>\r\n"                                 "Host : <a href="http://www.daum.net" rel="nofollow">www.daum.net</a>\r\n" "http://"는 빠져야 함.
"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"                                        "\r\n"이 빠져 있음.
"Connection: Close\r\n\r\n";

등등...

kin4olda의 이미지

http://로 시작하는거는 가져올수 없나요??

gilgil의 이미지

음... URL과 Host를 헷갈려 하시는 것 같군요.

URL은 다음과 같은 format을 가집니다(출처 : http://en.wikipedia.org/wiki/Uniform_resource_locator ).

scheme://domain:port/path?query_string#fragment_id

URL format에서 "domain"이라고 하는 부분을 다른 말고 "host"라고 하는 것입니다.

다시 말해서
"http://www.daum.net"은 URL이고
"www.daum.net"은 host라는 얘기입니다.

말로 설명하는 것보다는 직접 패킷을 잡아 보시는 것이 좋을 듯 합니다.
웹브라우저에서 http://www.daum.net 에 들어 가 보고 송수신되는 패킷을 wireshark로 잡아서 분석해 보세요.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.