亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? client.cpp

?? VC++語言中級教材,講授網絡編程中語言的運用技術
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
//Extract all pictures in a url
//by caucy 2005.12.5
#include "stdafx.h"
#include "Client.h"
#include <winsock2.h>
#include <afxsock.h>
#include <assert.h>
#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <string>
#include <time.h>
#include <VECTOR>
#include <sys/TIMEB.H>

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

using namespace std;

#define BUFFER_BLOCK_SIZE 4096
#define DEAL_SOCK_ERROR(retCode,sock)	if((retCode)==SOCKET_ERROR || (retCode)==0)\
										{										\
											cout<<"Sock error: "<<GetLastError()<<endl;\
											closesocket(sock);					\
											return -1;							\
										}
//Auxiliary Functions
int HttpRequest();
u_long ConvertHostnameToLongHostAddress(const char * destAddress);
void RenameFileName(string& filename);
void GivenUniqueFileName(const string& dir,
					const string& subject,
					string& name,
					string postfix);
void SplitURLToHostAndSubURL(const string& url, string& hostname, string& suburl);
void SplitURLToNameAndPostfix(string& src, string& name, string& postfix);

//Agent Application Functions
int GetHTML(const string& proxyServerName,
			 UINT proxyServerPort,
			 const string& proxyUser,
			 const string& proxyPass,
			 const string& serverHostName,	 
			 UINT serverPort,
			 string& url);
int GetImage(const string& proxyServerName,
			 UINT proxyServerPort,
			 const string& proxyUser,
			 const string& proxyPass,
			 const string& serverHostName,	 
			 UINT serverPort,
			 string& url,
			 string& filename);
void GetStartString(string& str, string& startStr);
BOOL FilterStartTag(string& str, const string& tag);
BOOL FilterSourceImageURL(string& body, string& url);
void EncodingBase64(const char* src, char* des);

int Socks5StartIPv4(const string& proxyServerHostName,
				u_int proxyServerPort,
				const string& username, 
				const string& pass,
				u_long destAddress,
				u_int destPort,
				SOCKET& sock);
int HttpProxyStart(const string& proxyServerHostName,
				u_int proxyServerPort,  
				const string& username, 
				const string& pass,
				u_long destAddress,
				u_int destPort,
				SOCKET& sock);

#define INTEREST_IMAGE_TYPE_COUNT 2
char *gInterestImagePostfix[]={"jpg","bmp"};


int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
	HttpRequest();
	return 0;
}

int HttpRequest()
{
	//URL
	string url;
	string serverHostName;
	string suburl;
	UINT serverPort=80;

	//proxy
	string proxyServerName;
	UINT proxyServerPort;
	string proxyUser;
	string proxyPass;

 	SplitURLToHostAndSubURL(url, serverHostName, suburl);
	if(url.find("http:/",0)==string::npos)
	{
		url=string("http://")+url;
	}
	if(suburl=="/")
	{
		if(url.find_last_of('/',url.length())!=url.length()-1)
			url+="/";
	}
	
	WSADATA wsaData;
	if(WSAStartup(MAKEWORD( 2, 2 ), &wsaData)!=0)
		cerr<<"socket init error"<<endl;

	if(GetHTML(proxyServerName,proxyServerPort,proxyUser,proxyPass,
					serverHostName,serverPort,url)==-1)
		cout<<"Unsuccessfully request."<<endl;
	return 0;
}

int ConnectToServer(const string& proxyServerName, UINT proxyServerPort,
			 const string& proxyUser, const string& proxyPass,
			 const string& serverHostName, UINT serverPort, SOCKET& sock)
{
	sockaddr_in serverAddr;
	hostent * host;

	if(proxyServerName.length()!=0)//using socks5 proxy
	{
		u_long addr=ConvertHostnameToLongHostAddress(serverHostName.c_str());
//		if(Socks5StartIPv4(proxyServerName,proxyServerPort,proxyUser,proxyPass,addr,serverPort,sock)!=0)
		if(HttpProxyStart(proxyServerName,proxyServerPort,proxyUser,proxyPass,addr,serverPort,sock)!=0)
		{
			cerr<<"Proxy server error!"<<endl;
			return -1;
		}
	}
	else
	{
		host=gethostbyname(serverHostName.c_str());
		if(host==NULL)
		{
			cout<<"Cann't resolve this host name: "<<GetLastError()<<endl;
			return -1;
		}

		sock=socket(AF_INET, SOCK_STREAM,0);
		serverAddr.sin_addr=*(struct in_addr*)host->h_addr;
		serverAddr.sin_family=AF_INET;
		serverAddr.sin_port=htons(serverPort);
		cout<<"Connecting to "<<inet_ntoa(serverAddr.sin_addr)<<endl;
		cout.flush();
		if(connect(sock,(const sockaddr*)&serverAddr,sizeof(sockaddr))==SOCKET_ERROR)
		{
			cout<<"Cannot connect to Server: "<<serverHostName.c_str()<<endl;
			cout.flush();
			closesocket(sock);
			return -1;
		}
	}
	return 0;
}

int GetHTML(const string& proxyServerName,
			 UINT proxyServerPort,
			 const string& proxyUser,
			 const string& proxyPass,
			 const string& serverHostName,	 
			 UINT serverPort,
			 string& url)
{
	int retCode;
	SOCKET sock;
	string str;
	string::size_type pos;
	char buffer[BUFFER_BLOCK_SIZE+1];
	char filter[BUFFER_BLOCK_SIZE+1];
	string head,body;
	string filename;
	string imageurl, imagename, imagepostfix;
	char * p;

	if(ConnectToServer(proxyServerName, proxyServerPort,proxyUser,proxyPass,\
			 serverHostName, serverPort,sock)==-1)
		return -1;
	
	//1. GET Command
	sprintf(buffer,"GET %s HTTP/1.1\r\nHost: %s\r\n\r\n",url.c_str(),serverHostName.c_str());

	cout<<buffer;
	cout.flush();
	send(sock,buffer,strlen(buffer),0);
	while(1)
	{
		retCode=recv(sock,buffer,BUFFER_BLOCK_SIZE,0);
		if(retCode==0 || retCode==-1)
			break;
		buffer[retCode]='\0';
		cout<<buffer;
		cout.flush();
		str+=buffer;
	}

	//2. Split head / body information
	pos=0;
	if((pos=str.find("\r\n\r\n",pos))==string::npos)
		goto _FAIL;
	//head
	head=str.substr(0,pos+2);
	pos=0;
	p= new char[head.length()+1];
	strcpy(p,head.c_str());
	_strlwr(p);
	head=p;
	delete[] p;
	//body
	body=str.substr(pos+4,str.length()-(pos+4));
	if(body.length()==0)
		goto _FAIL;
	p= new char[body.length()+1];
	strcpy(p,body.c_str());
	_strlwr(p);
	body=p;
	delete[] p;
	
	//3. Filter request return code
	pos=head.find("\r\n",0);
	strcpy(buffer,head.substr(0,pos).c_str());
	head=string(head).substr(pos+2,head.length()-pos-1);
	if(sscanf(buffer,"%s%d",filter,&retCode)==-1 || retCode/100!=2)
		goto _FAIL;

	//4. Retrive all picture links
	while(FilterSourceImageURL(body,imageurl))
	{
		SplitURLToNameAndPostfix(imageurl,imagename,imagepostfix);
		for(int i=0; i<INTEREST_IMAGE_TYPE_COUNT; i++)
		{
			if(stricmp(imagepostfix.c_str(),gInterestImagePostfix[i])==0)
			{
				//FilterStartTag(imageurl,"http:/");
				string newhostname,suburl;
				if(imageurl.find("http:/",0)!=string::npos)
				{
					SplitURLToHostAndSubURL(imageurl, newhostname, suburl);
				}
				else
				{
					newhostname=serverHostName;
					pos=url.find_last_of('/',url.length());
					suburl=url.substr(0,pos+1);
					suburl=suburl+imageurl;
				}
				GetImage(proxyServerName, proxyServerPort, proxyUser,proxyPass, newhostname, serverPort, suburl,imageurl);
			}
		}
	}
	return 0;
_FAIL:
	return -1;
}

int GetImage(const string& proxyServerName,
			 UINT proxyServerPort,
			 const string& proxyUser,
			 const string& proxyPass,
			 const string& serverHostName,	 
			 UINT serverPort,
			 string& url,
			 string& filename)
{
	int retCode;
	SOCKET sock;
	string::size_type pos;
	char buffer[BUFFER_BLOCK_SIZE+1];
	char filter[BUFFER_BLOCK_SIZE+1];
	string head;
	int contentLength,fileLength;
	int tag;
	ofstream file;
	BOOL bProcessHead=TRUE;
	char *p;
	if(ConnectToServer(proxyServerName, proxyServerPort,proxyUser,proxyPass,\
			 serverHostName, serverPort,sock)==-1)
		return -1;
	GivenUniqueFileName("",string(filename),filename,"");
	file.open(filename.c_str(),ios::binary);
	assert(!file.fail());

	//1. GET Command
	sprintf(buffer,"GET %s HTTP/1.1\r\nHost: %s\r\n\r\n",url.c_str(),serverHostName.c_str());
	cout<<buffer;
	cout.flush();
	send(sock,buffer,strlen(buffer),0);
	contentLength=0;
	while(1)
	{
		retCode=recv(sock,buffer,BUFFER_BLOCK_SIZE,0);
		if(retCode==-1)
		{
			closesocket(sock);
			return -1;
		}
		if(retCode==0)
			break;
		if(bProcessHead)
		{
			buffer[retCode]='\0';
			cout<<buffer;
			cout.flush();
			strcpy(filter,buffer);
			_strlwr(filter);
			head+=filter;
			if((pos=head.find("\r\n\r\n",0))!=string::npos)
			{
				pos=head.find("\r\n",0);
				strcpy(filter,head.substr(0,pos).c_str());
				if(sscanf(string(filter).c_str(),"%s%d",filter,&tag)==-1 || tag/100!=2)
				{
					closesocket(sock);
					return -1;
				}
				strcpy(filter,"\r\ncontent-length:");
				if((p=strstr(head.c_str(),filter))!=NULL)
				{
					p+=strlen(filter);
					strcpy(filter,p);
					if(sscanf(filter,"%d",&fileLength)==-1)
					{
						closesocket(sock);
						return -1;
					}
					cout<<"File length: "<<fileLength<<endl;
					cout.flush();
				}
				bProcessHead=FALSE;
				pos=head.find("\r\n\r\n",0);
				contentLength=pos+4-contentLength;
				file.write(buffer+contentLength,retCode-contentLength);
				fileLength-=(retCode-contentLength);
			}
			else
				contentLength+=retCode;
		}
		else
		{
			cout<<".";
			cout.flush();
			file.write(buffer,retCode);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
极品少妇xxxx偷拍精品少妇| 94-欧美-setu| 国产麻豆视频精品| 国产91精品露脸国语对白| 日本韩国精品一区二区在线观看| 欧美日韩三级一区二区| 26uuu欧美日本| 亚洲欧美日韩国产手机在线| 日韩1区2区日韩1区2区| 福利一区福利二区| 欧美卡1卡2卡| 国产精品久久久久婷婷 | 欧美午夜电影网| 精品美女在线播放| 一区二区三区精品视频| 韩国成人在线视频| 欧美色国产精品| 国产亚洲一区二区三区在线观看| 一区二区三区日本| 蜜臀av性久久久久蜜臀aⅴ四虎| 丁香一区二区三区| 这里只有精品99re| 日韩美女精品在线| 精品一区二区三区在线观看国产| 99久久久国产精品免费蜜臀| 精品久久久久久久久久久久包黑料| 亚洲蜜臀av乱码久久精品蜜桃| 韩国av一区二区| 欧美日本在线播放| 国产欧美日韩视频在线观看| 日本特黄久久久高潮| 91丨九色丨尤物| 久久精品在线免费观看| 日本不卡一区二区| 色悠悠亚洲一区二区| 久久嫩草精品久久久久| 日韩精彩视频在线观看| 91香蕉视频黄| 国产精品青草综合久久久久99| 麻豆成人免费电影| 欧美日韩视频在线第一区 | 欧美这里有精品| 亚洲国产高清不卡| 国产在线精品国自产拍免费| 91精品福利在线一区二区三区| 亚洲日本在线观看| 本田岬高潮一区二区三区| 精品国产乱码久久| 午夜视频一区二区| 欧美视频在线不卡| 亚洲女人的天堂| 99久久伊人精品| 国产免费成人在线视频| 96av麻豆蜜桃一区二区| 国产三级久久久| 国产原创一区二区三区| 精品久久久久久久久久久久包黑料| 视频一区视频二区中文| 欧美午夜片在线看| 亚洲男人天堂一区| 99国产一区二区三精品乱码| 国产精品久久久久影院老司| 丁香五精品蜜臀久久久久99网站| 久久人人97超碰com| 男女男精品视频| 日韩一区和二区| 喷白浆一区二区| 日韩三级视频在线看| 麻豆精品精品国产自在97香蕉| 欧美一区二区三区人| 婷婷中文字幕综合| 欧美日韩亚洲高清一区二区| 视频一区中文字幕| 91精品国产91综合久久蜜臀| 日本91福利区| 日韩欧美一区二区视频| 久久精品99国产精品| 精品国产一区二区三区久久影院| 免费xxxx性欧美18vr| 日韩三级伦理片妻子的秘密按摩| 久久福利视频一区二区| 日韩精品一区二区三区中文不卡| 黄网站免费久久| 久久久久久久久久久久久夜| 国产精品一区二区男女羞羞无遮挡| 久久久国产午夜精品| caoporn国产精品| 亚洲卡通欧美制服中文| 欧美日韩激情在线| 久久99国产精品久久99| 久久久久久日产精品| 成人国产精品免费观看视频| 亚洲欧洲精品一区二区精品久久久| 91麻豆国产福利在线观看| 亚洲午夜激情av| 日韩一区二区精品在线观看| 国产又粗又猛又爽又黄91精品| 26uuu亚洲| 色综合夜色一区| 亚洲国产三级在线| 欧美一区二区三区系列电影| 极品瑜伽女神91| 亚洲欧美自拍偷拍色图| 欧美日韩国产高清一区二区三区| 精彩视频一区二区三区| 国产精品毛片久久久久久| 精品视频999| 国产永久精品大片wwwapp| 亚洲特级片在线| 欧美剧情片在线观看| 国产一区二区三区在线观看免费视频| 日韩精品资源二区在线| 欧美成人a∨高清免费观看| 91.com视频| 欧美国产禁国产网站cc| 国产精品人成在线观看免费| 久久久国产午夜精品| 国产情人综合久久777777| 久久免费精品国产久精品久久久久| 欧美一个色资源| 精品国产乱子伦一区| 中文字幕一区二区三区视频| 亚洲欧洲日韩女同| 久热成人在线视频| 亚洲资源在线观看| 日韩精品一区二区三区视频在线观看| 成人av资源站| 奇米777欧美一区二区| 国产精品天美传媒沈樵| 制服丝袜亚洲色图| 99精品国产热久久91蜜凸| 久久99精品一区二区三区三区| 亚洲激情自拍偷拍| 久久久久久综合| 欧美丰满高潮xxxx喷水动漫 | 91精品国产入口| av在线综合网| 久久成人综合网| 亚洲午夜私人影院| 国产精品青草久久| 欧美电影精品一区二区| 精品视频一区三区九区| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 亚洲成人tv网| 中文字幕一区二区5566日韩| 精品国产免费人成在线观看| 欧美日韩在线综合| www.欧美.com| 激情六月婷婷久久| 丝袜美腿亚洲一区| 洋洋成人永久网站入口| 亚洲欧洲在线观看av| 国产清纯白嫩初高生在线观看91| 欧美一二三区在线观看| 欧美日韩国产片| 欧美亚洲自拍偷拍| 色综合婷婷久久| 成人在线一区二区三区| 国产在线看一区| 另类成人小视频在线| 午夜影院久久久| 亚洲综合成人在线| 日韩毛片一二三区| 中文字幕在线不卡一区二区三区| 国产欧美日本一区二区三区| 久久亚洲综合av| 精品久久久久久亚洲综合网| 日韩一区二区影院| 欧美一级在线观看| 91精品国产一区二区| 欧美日韩免费一区二区三区 | 亚洲一二三专区| 中文字幕综合网| 亚洲天堂网中文字| ...中文天堂在线一区| 国产精品美女久久久久久久网站| 国产欧美一区二区精品忘忧草| 久久先锋资源网| www激情久久| 久久精品人人做人人综合 | 国产成人av电影在线| 国产一区二区在线看| 国产一区三区三区| 国产剧情一区在线| 成人自拍视频在线| 成人精品一区二区三区中文字幕| 成人精品在线视频观看| www.av精品| 91老师片黄在线观看| 色诱亚洲精品久久久久久| 欧美综合一区二区三区| 欧美日韩日本视频| 日韩欧美成人午夜| 精品国产一区二区三区久久久蜜月| 精品三级av在线| 国产日韩精品一区二区三区 | 色狠狠综合天天综合综合| 欧美三片在线视频观看| 在线不卡一区二区| 91精品国产91综合久久蜜臀|