C++写的获取网页

// c5.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <stdlib.h>

#include <winsock2.h>

#include <memory.h>

#include <assert.h>
		
#include "c5.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#pragma comment(lib, "ws2_32.lib")

CWinApp theApp;

using namespace std;

#define DBG 1
#define SERVPORT 80
#define MAXDATASIZE 40000 /*每次最大数据传输量 */

char    buf[MAXDATASIZE];
char    header[300] = "";
int     sockfd,wsastat,server_ip,error;

DWORD WINAPI get_server_msg(LPVOID lp_param);



class sock{

public :
	void cre_sock(void);

	

};


DWORD WINAPI get_server_msg(LPVOID lp_param){
	

		
		while( (recv( sockfd, buf, MAXDATASIZE, 0 ))  >0){
			
			FILE *fp;
			CString str,str2;
			str = buf;
			str = str.Mid(5000,600);
			const char *lpctStr=(LPCTSTR)str;
			
			if ( (fp = fopen( "page.txt", "w+" )) !=NULL ){
				
				if ( (fputs(lpctStr,fp)) != EOF ){
					printf("%s %d\n","write~^_^",str.GetLength());
				}else{
					printf("write~ - -");
				}
				
			}else{
				printf("%s \n","........");
			}

			fclose(fp);
		}
		return 0;
};



void sock::cre_sock(void){

	    /* host name */
		char   *domain = "czzp114.com";
		static WSADATA wsa_data;
		struct hostent *host;
		struct sockaddr_in serv_addr;
    
		strcat(header, "GET ");
		
		strcat(header, "/");
		//strcat(header, "cate=72288cb9cc334746920897b9095fd7ad&basictype=0");
		//strcat(header, "&ga=e2c6bab2de7647a3990a8f6d87b7f71d");
		//strcat(header, "&gs=d8d1b31d0cfd43ed90c1194b1e10f0ba");

		strcat(header, " HTTP/1.1\r\n");
		strcat(header, "HOST: ");
		strcat(header, domain);
		//*header = "http://czzp114.com";
		/*
			strcat(header, "\r\nConnection: Close\r\n\r\n"); //连接一次则关闭SOCk
		*/

		strcat( header, "\r\nConnection: keep-alive\r\n\r\n" );//长连接

		
		wsastat = WSAStartup(MAKEWORD(2,2), &wsa_data);
		
		if( wsastat != 0x00000000 ){// 初始化失败
			
			printf("create a socket it's fill");
			system("pause");
			
		}
		
		memset( &serv_addr,0,sizeof(struct sockaddr) );
		
		if ( DBG==0 ){
			
			char hostname[128];
			gethostname( hostname, 127 );
			host = gethostbyname(hostname);
			
		}else{
			host = gethostbyname(domain);
			
		}
		
		memcpy( &server_ip, host->h_addr_list[0], sizeof(host->h_addr_list[0]) );
		if( host==NULL ){
			
			error = WSAGetLastError();
			printf("%d",error);
			system("pause");
			
		}
		
		if ( ( sockfd = socket( AF_INET, SOCK_STREAM, 0 ) ) == -1 ){
			
			printf("socket create error!");
			system("pause");
			
			
		}
		
		serv_addr.sin_family      = AF_INET; 
		serv_addr.sin_port        = htons(SERVPORT);
		serv_addr.sin_addr.s_addr = server_ip;
		
		if ( connect( sockfd, (struct sockaddr *) &serv_addr,sizeof(struct sockaddr) ) <0 ) {
			
			printf( "conntion server invalid!error code:%d\n", WSAGetLastError() );
			system("pause");
			
		}else{
			
			printf("conntion server ok!code:%d\n",WSAGetLastError());
			printf("wait message for server!.....\n");
		}

		HANDLE h_tad;
		DWORD  dw_tadid;
		h_tad = CreateThread( NULL ,NULL,get_server_msg, NULL, 0, &dw_tadid );
		while(1){
			send( sockfd, header, strlen(header), 0 );
			printf("HOST:%s \n",domain);
			Sleep(10*1000);
			system("cls");
			
		}
}





void proc_main(void);

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
	int nRetCode = 0;
	SetConsoleTitle(TEXT("小虾子"));
	
	if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
	{
		
		cerr << _T("Fatal Error: MFC initialization failed") << endl;
		nRetCode = 1;
	}
	else
	{
		proc_main();	

	}

	return nRetCode;
}

void proc_main(void){

	sock pc_sock;

	pc_sock.cre_sock();

	system("pause");

}
posted @ 2011-04-28 22:01  方东信  阅读(287)  评论(0编辑  收藏  举报