備注學(xué)院

          LuLu

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            5 隨筆 :: 50 文章 :: 16 評(píng)論 :: 0 Trackbacks

          #include <stdio.h>
          #include <stdlib.h>
          #include <string.h>
          #include <winsock2.h> //header
          #pragma comment (lib, "ws2_32.lib") //lib

          void SendString(SOCKET sock,LPCSTR str)
          {
              send(sock,str,strlen(str),0);
          }

          int main(void)
          {
           WSADATA  wsaData;
           SOCKET  sock;
           SOCKADDR_IN tcpaddr;
           hostent * remoteHost;
           char   host[] = {"www.hao123.com"};     //主機(jī)名就直接寫(xiě)了
           int   Ret,l;
           BOOL  done;
           int   port = 80;
           int   chars = 0;
           char  buffer[512];

           if( (Ret = WSAStartup(MAKEWORD(1,1), &wsaData) ) != 0 )
           {
            printf("WSAStartup failed with error %d\n", Ret);
            return 1;
           }

           if( (remoteHost = gethostbyname(host)) == NULL )       //通過(guò)主機(jī)名獲取地址
           {
            printf("gethostbyname error!\n");
            return 1;
           }
           
           sock = socket (AF_INET, SOCK_STREAM, 0);
           
           tcpaddr.sin_family = AF_INET;
           tcpaddr.sin_port = htons( (unsigned short)port );
           tcpaddr.sin_addr.s_addr = *((unsigned long *)*remoteHost->h_addr_list);  //轉(zhuǎn)換地址

           if( connect(sock, (const sockaddr * )&tcpaddr, sizeof(tcpaddr)) )
           {
            printf("connect error!");
            return 1;
           }
          //這里是要發(fā)送的http頭部
           SendString(sock,"GET / HTTP/1.1\r\n");
           SendString(sock,"Host:www.hao123.com\r\n");
           SendString(sock,"Accept: */*\r\n");
           SendString(sock,"User-Agent: Mozilla/4.0");
           SendString(sock,"(compatible; MSIE 5.00; Windows 98)\r\n");
           SendString(sock,"Connection:Keep-Alive\r\n");
           SendString(sock,"\r\n");
           SendString(sock,"\r\n");//最后要加空行

           done = FALSE;
           FILE * fp;
           fp = fopen("1.txt","w");
          //打印并保存http響應(yīng)的頭部
              while(!done)
              {
                  l = recv(sock,buffer,1,0);
                  if(l<0)
                      done=TRUE;
            switch(*buffer)
                  {
                      case '\r':
                          break;
                      case '\n':
                          if(chars==0)
                              done = TRUE;
                          chars=0;
                          break;
                      default:
                          chars++;
                          break;
                  }
            printf("%c",*buffer);
            fputc(buffer[0],fp);
              }

          //接收正文部分
           int sum = 0;
           do
           {
            l = recv(sock,buffer,sizeof(buffer)-1,0);
            if( l < 0 )
             break;
            sum += l;
            *(buffer + l) = 0;
            fputs(buffer,fp);
           } while( l > 0 );

           //這里輸出正文部分大小,發(fā)現(xiàn)其實(shí)和響應(yīng)消息頭部的Content-length大小是一樣的
          //這樣就可以檢查是否接受完畢
           printf("sum = %d\n",sum);

           closesocket(sock);

           if( WSACleanup() == SOCKET_ERROR )
           {
            printf("WSACleanup failed with error %d \n", WSAGetLastError() );
           }

           return 0;
          }

           

           


           

          posted on 2007-11-17 10:35 smildlzj 閱讀(587) 評(píng)論(0)  編輯  收藏 所屬分類: C&C++
          主站蜘蛛池模板: 军事| 和平区| 岑溪市| 潢川县| 巴中市| 临江市| 华容县| 台中县| 宾川县| 且末县| 安陆市| 会东县| 茂名市| 施秉县| 昌宁县| 开江县| 平邑县| 庆云县| 泽州县| 丽江市| 四子王旗| 邳州市| 教育| 永泰县| 石屏县| 霍州市| 内乡县| 嘉义县| 泰顺县| 延安市| 土默特右旗| 桂林市| 安宁市| 黄陵县| 乐东| 河东区| 南丹县| 金沙县| 德州市| 淮南市| 扬中市|