【C++】实用socket编程 获取网页html信息

来源:互联网 发布:新乡青峰网络招聘 编辑:程序博客网 时间:2024/05/21 11:15

[cpp] view plaincopy
  1. // Socket1.cpp : 定义控制台应用程序的入口点。  
  2. //  
  3. #include "stdafx.h"  
  4. #include<winsock.h>  
  5. #include<stdio.h>  
  6. #include<string>  
  7. #include<iostream>  
  8. using namespace std;  
  9. #define WSWENS MAKEWORD(2,0)  
  10. int _tmain(int argc, _TCHAR* argv[])  
  11. {  
  12.     sockaddr_in sin;  
  13.     WSADATA wsadata;  
  14.     //WSAStartup()的调用方和Windows Sockets DLL互相通知对方它们可以支持的最高版本,  
  15.     //并且互相确认对方的最高版本是可接受的. 在WSAStartup()函数的入口,  
  16.     //Windows Sockets DLL检查了应用程序所需的版本.如果版本高于DLL支持的最低版本,  
  17.     //则调用成功并且DLL在wHighVersion中返回它所支持的最高版本,  
  18.     //在 wVersion中返回它的高版本和wVersionRequested中的较小者.  
  19.     //然后Windows Sockets DLL就会假设应用程序将使用wVersion.  
  20.     if(WSAStartup(WSWENS,&wsadata)!=0)  
  21.       
  22.         cout<<"startup failed"<<endl;  
  23.       
  24.     SOCKET s = socket(PF_INET,SOCK_STREAM,0);  
  25.     // memset 是对一段内存空间全部设置为某个字符  
  26.     memset(&sin,0,sizeof(sin));  
  27.     sin.sin_family = AF_INET;  
  28.     sin.sin_port = htons(80);  
  29.     //sin.sin_addr.S_un.S_addr=inet_addr("203.208.37.99");  
  30.     hostent* hptr = gethostbyname("www.google.cn");  
  31.     // 将有参数的string内容copy到左边参数  
  32.     memcpy(&sin.sin_addr.S_un.S_addr,hptr->h_addr,hptr->h_length);  
  33.     printf("IP address:%d.%d.%d.%d/n",sin.sin_addr.S_un.S_un_b.s_b1,  
  34.         sin.sin_addr.S_un.S_un_b.s_b2,  
  35.         sin.sin_addr.S_un.S_un_b.s_b3,  
  36.         sin.sin_addr.S_un.S_un_b.s_b4);  
  37.     // 将sockaddr_in transfer to sockaddr  
  38.     if(connect(s,(sockaddr*)&sin,sizeof(sin)))  
  39.     {  
  40.         cout<<"connect failed"<<endl;  
  41.         return 0;  
  42.     }  
  43.     else  
  44.     {  
  45.         cout<<"connect success"<<endl;  
  46.     }  
  47.     char buffersend[]="GET/HTTP1.1/nHOST:www.google.cn/nconnection:close/n/n";  
  48.     send(s,buffersend,strlen(buffersend),0);  
  49.     /*string ss; 
  50.     int len = recv(s,const_cast<char*>(ss.c_str()),2000,0);*/  
  51.     char bufferecv[10240];  
  52.     int len=recv(s,bufferecv,10240,0);  
  53.     printf("the length of page is %d/n", len);  
  54.     if(len==-1)  
  55.     {  
  56.         cout<<"receive failed"<<endl;  
  57.         return -1;  
  58.     }  
  59.     else   
  60.         cout<<"receive success"<<endl;  
  61.     for (int i = 0; i < len; i++)  
  62.         printf("%c",bufferecv[i]);  
  63.     WSACleanup();  
  64.     closesocket(s);  
  65.     return 0;  
  66. }   

 

原创粉丝点击