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

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

?? proxy32.cpp

?? http代理服務器
?? CPP
字號:
// proxy32.cpp : 定義應用程序的入口點。
//

#include "stdafx.h"
#include "proxy32.h"

//#include <afxwin.h>
#include < winsock2.h > //WINSOCKET API 2。0 



#define HTTP "http://" 

#define FTP "ftp://" 

#define PROXYPORT 8080 //Proxy 端口 

#define BUFSIZE 10240 //緩沖區大小 


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


//using namespace std; 

UINT ProxyToServer(LPVOID pParam); 

UINT UserToProxyThread(void *pParam); 

struct SocketPair{ 

SOCKET user_proxy; //socket : 本地機器到PROXY 服務機 

SOCKET proxy_server; //socket : PROXY 服務機到遠程主機 

BOOL IsUser_ProxyClosed; // 本地機器到PROXY 服務機狀態 

BOOL IsProxy_ServerClosed; // PROXY 服務機到遠程主機狀態 

}; 

struct ProxyParam{ 

char Address[256]; // 遠程主機地址 

HANDLE User_SvrOK; // PROXY 服務機到遠程主機的聯結狀態 

SocketPair *pPair; // 維護一組SOCKET的指針 

int Port; // 用來聯結遠程主機的端口 

}; //這個結構用來PROXY SERVER與遠程主機的信息交換. 

SOCKET gListen_Socket; //用來偵聽的SOCKET。 



#define MAX_LOADSTRING 100


//////////////////////////////////////////////////////////////// 

//CWinApp theApp; 


int StartServer() //啟動服務 

{ 
    
	WSADATA wsaData; 
	sockaddr_in local; 
	SOCKET listen_socket; 

	if(::WSAStartup(0x202,&wsaData)!=0) 
	{
	//	/////printf("\nError in Startup session.\n");
		WSACleanup();
		return 	-1;
	} 

	local.sin_family=AF_INET; 

	local.sin_addr.s_addr=INADDR_ANY; 

	local.sin_port=htons(PROXYPORT); 
	listen_socket=socket(AF_INET,SOCK_STREAM,0); 
	if(listen_socket==INVALID_SOCKET) 
	{
	//	/////printf("\nError in New a Socket.");
		WSACleanup();
		return -2;
	} 

	if(::bind(listen_socket,(sockaddr *)&local,sizeof(local))!=0) 
	{
	//	/////printf("\n Error in Binding socket.");
		WSACleanup();
		return -3; 
	}; 

	if(::listen(listen_socket,5)!=0)
	{
	//	/////printf("\n Error in Listen.");
		WSACleanup(); 
		return -4;
	} 

	gListen_Socket=listen_socket; 

	AfxBeginThread(UserToProxyThread,NULL); //啟動偵聽 
	return 1; 

} 

int CloseServer() //關閉服務 
{ 

	::shutdown(gListen_Socket,SD_SEND);
	closesocket(gListen_Socket); 
	WSACleanup(); 

	return 1; 

} 

//分析接收到的字符,得到遠程主機地址 

int GetAddressAndPort( char * str, char *address, int * port) 
{ 
	char buf[BUFSIZE], command[512], proto[128], *p; 

	int j; 

	sscanf(str,"%s%s%s",command,buf,proto); 

	p=strstr(buf,HTTP); 

	//HTTP 
	if(p) 
	{ 
        
		p+=strlen(HTTP);
		for(int i=0;i< strlen(p);i++) 
			if( *(p+i)=='/') 
				break; 
		*(p+i)=0; 
		strcpy(address,p); 
		p=strstr(str,HTTP); 

		for(int j=0;j< i+strlen(HTTP);j++) 
			*(p+j)=' '; //去掉遠程主機%C去掉遠程主機名: GET http://www.njust.edu.cn/ HTTP1.1 == > GET / HTTP1.1
		
		//如果不是默認的80端口
		//要做處理
		int ilocation=-1;
		for(int i=0;i<strlen(address);i++)
		{
			if(address[i]==':')
			{

				ilocation=i;
				break;
			}
		}
		if(ilocation>0)
		{
			address[ilocation]=0;
			char *pch=&address[ilocation+1];
			*port=atoi(pch);
		}
		else
			*port=80; //缺省的 http 端口
	
		//分析接收到的字符,得到遠程主機地址 

	} 
	else 
	{//FTP, 不支持, 下面的代碼可以省略.
		p=strstr(buf,FTP); 
		if(!p) 
			return 0;
		p+=strlen(FTP);
		for(int i=0;i< strlen(p);i++) 
			if( *(p+i)=='/') 
				break; //Get The Remote Host
		*(p+i)=0;
		for(j=0;j< strlen(p);j++)
			if(*(p+j)==':') 
			{
				*port=atoi(p+j+1); //Get The Port
				*(p+j)=0; 
			} 
			else 
				*port=21; 
		strcpy(address,p); 
		p=strstr(str,FTP);
		for(j=0;j< i+strlen(FTP);j++)
			*(p+j)=' '; 
	} 
	return 1; 
} 

// 取到本地的數據,發往遠程主機
UINT UserToProxyThread(void *pParam)
{ 
	char Buffer[BUFSIZE];
	int Len;
	sockaddr_in from;
	SOCKET msg_socket; 
	int fromlen,retval;
	SocketPair SPair; 
	ProxyParam ProxyP;

	CWinThread *pChildThread;
	HANDLE hChildThread;
	fromlen=sizeof(from);
	msg_socket=accept(gListen_Socket,(struct sockaddr*)&from,&fromlen); 

	//hChildThread=::CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)UserToProxyThread,pParam,NULL,NULL);    /// add via netwalker
	AfxBeginThread(UserToProxyThread,pParam); //啟動另一偵聽. 

	if( msg_socket==INVALID_SOCKET) 
	{ 
		/////printf( " Error in accept ");
		return -5;
	} 
	//讀客戶的第一行數據
	SPair.IsUser_ProxyClosed=FALSE;
	SPair.IsProxy_ServerClosed=TRUE; 
	SPair.user_proxy=msg_socket;
	retval=recv(SPair.user_proxy,Buffer,sizeof(Buffer),0);
	if(retval==SOCKET_ERROR)
	{ 
		/////printf(" Error Recv");
		if(SPair.IsUser_ProxyClosed==FALSE)
		{
			::shutdown(SPair.user_proxy,SD_SEND);
			closesocket(SPair.user_proxy); 
			SPair.IsUser_ProxyClosed=TRUE;

		} 
	//	MessageBox(0,"error receive",0,0);
		return 0;

	} 
	if(retval==0) 
	{
		/////printf("Client Close connection ");
		if(SPair.IsUser_ProxyClosed==FALSE)
		{
			::shutdown(SPair.user_proxy,SD_SEND);
			closesocket(SPair.user_proxy);
			SPair.IsUser_ProxyClosed=TRUE; 
		}
	//	MessageBox(0,"close connection by client",0,0);
		return 0;
	} 
	Len=retval; 
#ifdef _DEBUG Buffer[Len]=0; 
	/////printf(" Received %d bytes,data[%s]from client ",retval,Buffer); 
#endif //
	SPair.IsUser_ProxyClosed=FALSE;
	SPair.IsProxy_ServerClosed=TRUE; 
	SPair.user_proxy=msg_socket;
	SocketPair *sp;
	sp=new SocketPair;
	sp->IsProxy_ServerClosed=SPair.IsProxy_ServerClosed;
	sp->IsUser_ProxyClosed=SPair.IsUser_ProxyClosed;
	sp->user_proxy=msg_socket;
	sp->proxy_server=0; //SPair.proxy_server;
	ProxyP.pPair=sp; 
	ProxyP.User_SvrOK=CreateEvent(NULL,TRUE,FALSE,NULL);
	//memcpy(p,(void *)&ProxyParam,sizeof(ProxyParam));
	GetAddressAndPort( Buffer,ProxyP.Address,&ProxyP.Port);


	ProxyParam *p;
	p=new ProxyParam;
//	p=new ProxyParam; 
	strcpy(p->Address,ProxyP.Address );

	p->Port=ProxyP.Port;
	p->pPair=ProxyP.pPair;
	p->User_SvrOK=ProxyP.User_SvrOK;

	pChildThread=AfxBeginThread(ProxyToServer,p);
	CString str;
	str.Format("address=%s port=%d and start ProxyToServer thread ok\n",ProxyP.Address,ProxyP.Port);
	::OutputDebugString(str); 
//	HANDLE hthread=::CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)ProxyToServer,&ProxyP,NULL,NULL);

//	::WaitForSingleObject(hthread,60000); //等待聯結 	
	::WaitForSingleObject(ProxyP.User_SvrOK,60000); //等待聯結 

	SPair.IsProxy_ServerClosed=p->pPair->IsProxy_ServerClosed;
	SPair.IsUser_ProxyClosed=p->pPair->IsUser_ProxyClosed;
	SPair.proxy_server=p->pPair->proxy_server;
	SPair.user_proxy=p->pPair->user_proxy;
	::OutputDebugString("after wait for thread ProxyToServer for 60m ok and we continue\n");

//	::CloseHandle(hthread); 
	::CloseHandle(ProxyP.User_SvrOK);
	while(sp->IsProxy_ServerClosed ==FALSE && sp->IsUser_ProxyClosed==FALSE) 
	//		while(SPair.IsProxy_ServerClosed ==FALSE && SPair.IsUser_ProxyClosed==FALSE) 
	{
		retval=send(SPair.proxy_server,Buffer,Len,0); 
		if(retval==SOCKET_ERROR) 
		{ 
			/////printf(" send() failed:error%d ",WSAGetLastError()); 
			if(SPair.IsProxy_ServerClosed==FALSE) 
			{ 
				::shutdown(SPair.proxy_server,SD_SEND);
				closesocket(SPair.proxy_server);
				SPair.IsProxy_ServerClosed=TRUE;
			} 
			continue; 
		}

		::OutputDebugString("send data and wait to recvive data from \n ");

		retval=recv(SPair.user_proxy,Buffer,sizeof(Buffer),0); 
		if(retval==SOCKET_ERROR)
		{
			/////printf(" Error Recv");
			if(SPair.IsUser_ProxyClosed==FALSE)
			{
				::shutdown(SPair.user_proxy,SD_SEND);
				closesocket(SPair.user_proxy);
				SPair.IsUser_ProxyClosed=TRUE;
			}
			continue; 
		} 

		::OutputDebugString("recv data in UserToProxyThread \n");

		if(retval==0) 
		{
			/////printf("Client Close connection ");
			if(SPair.IsUser_ProxyClosed==FALSE)
			{
				::shutdown(SPair.user_proxy,SD_SEND);
				closesocket(SPair.user_proxy); 
				SPair.IsUser_ProxyClosed=TRUE;
			} 
			break; 
		} 
		Len=retval;
#ifdef _DEBUG Buffer[Len]=0;
		/////printf(" Received %d bytes,data[%s]from client ",retval,Buffer); 
#endif } //End While 
		if(SPair.IsProxy_ServerClosed==FALSE) 
		{ 
			::shutdown(SPair.proxy_server,SD_SEND);
			closesocket(SPair.proxy_server); 
			SPair.IsProxy_ServerClosed=TRUE;
		} 
		if(SPair.IsUser_ProxyClosed==FALSE)
		{
			::shutdown(SPair.user_proxy,SD_SEND);
			closesocket(SPair.user_proxy);
			SPair.IsUser_ProxyClosed=TRUE; 
		} 
	//	::WaitForSingleObject(hChildThread,20000); //Should check the return value
		
		::OutputDebugString("we quit now\n");
		::WaitForSingleObject(pChildThread->m_hThread,20000); //Should check the return value
		delete sp;
		delete p;
		return 0; 
}
}
// 讀取遠程主機數據,并發往本地客戶機
UINT ProxyToServer(LPVOID pParam)
{
	ProxyParam *pPar =(ProxyParam*)pParam; 
	char Buffer[BUFSIZE]; 
	char *server_name= "localhost";
	unsigned short port ;
	int retval,Len;
	unsigned int addr;
	int socket_type ; 
	struct sockaddr_in server;
	struct hostent *hp;
	SOCKET conn_socket; 
	socket_type = SOCK_STREAM;
	server_name = pPar->Address; 
	port = pPar->Port;
	if (isalpha(server_name[0]))
	{ /* server address is a name */ 
		hp = gethostbyname(server_name); 
	} 
	else 
	{ /* Convert nnn.nnn address to a usable one */
		addr = inet_addr(server_name); 
		hp = gethostbyaddr((char *)&addr,4,AF_INET);
	} 
	if (hp == NULL )
	{ 
//		fprintf(stderr,"Client: Cannot resolve address [%s]: Error %d ", server_name,WSAGetLastError());
		::SetEvent(pPar->User_SvrOK);
		return 0; 
	} // 
	// Copy the resolved information into the sockaddr_in structure // 
	memset(&server,0,sizeof(server));
	memcpy(&(server.sin_addr),hp->h_addr,hp->h_length);
	server.sin_family = hp->h_addrtype; 
	server.sin_port = htons(port); 
	conn_socket = socket(AF_INET,socket_type,0); /* 打開一個 socket */ 
	if (conn_socket < 0 )
	{ 
	//	fprintf(stderr,"Client: Error Opening socket: Error %d ", WSAGetLastError());
		pPar->pPair->IsProxy_ServerClosed=TRUE; 
		::SetEvent(pPar->User_SvrOK);
		return -1;
	} 
#ifdef _DEBUG /////printf("Client connecting to: %s ",hp- >h_name);
#endif 
	if (connect(conn_socket,(struct sockaddr*)&server,sizeof(server)) == SOCKET_ERROR)
	{ 
//		fprintf(stderr,"connect() failed: %d ",WSAGetLastError()); 
		pPar->pPair->IsProxy_ServerClosed=TRUE; 
		::SetEvent(pPar->User_SvrOK); 
		::OutputDebugString("faint,we connect to server error\n");
		return -1;
	}
	::OutputDebugString("ok,we connect to server ok\n");

	pPar->pPair->proxy_server=conn_socket; 
	pPar->pPair->IsProxy_ServerClosed=FALSE;
	::SetEvent(pPar->User_SvrOK); // cook up a string to send 
	while(!pPar->pPair->IsProxy_ServerClosed &&!pPar->pPair->IsUser_ProxyClosed) 
	{
		retval = recv(conn_socket,Buffer,sizeof (Buffer),0 );
		if (retval == SOCKET_ERROR )
		{ 
//			fprintf(stderr,"recv() failed: error %d ",WSAGetLastError());
			::shutdown(conn_socket,SD_SEND);
			closesocket(conn_socket); 
			pPar->pPair->IsProxy_ServerClosed=TRUE;
			break; 
		}

		::OutputDebugString("recv ok in ProxyToServer\n");
		::OutputDebugString(Buffer);
		::OutputDebugString("\n,,,,,,,,,,,,\n");

		Len=retval;
		if (retval == 0) 
		{ 
			/////printf("Server closed connection ");
			closesocket(conn_socket); 
			pPar->pPair->IsProxy_ServerClosed=TRUE;
			break;
		} 
		retval = send(pPar->pPair->user_proxy,Buffer,Len,0); 
		if (retval == SOCKET_ERROR)
		{ 
//			fprintf(stderr,"send() failed: error %d ",WSAGetLastError());
			::shutdown(pPar->pPair->user_proxy,SD_SEND);
			closesocket(pPar->pPair->user_proxy);
			pPar->pPair->IsUser_ProxyClosed=TRUE;
			DWORD ret=::GetLastError();
			CString str;
			str.Format("error in ProxyToServer which errror code is %d\n",ret);

			::OutputDebugString("");
			break;
		} 
		::OutputDebugString("send data to user who use proxy ok in ProxyToServer\n");
#ifdef _DEBUG Buffer[Len]=0;
		/////printf("Received %d bytes, data [%s] from server ",retval,Buffer); 
#endif 
	}  /// end while
	if(pPar->pPair->IsProxy_ServerClosed==FALSE)
	{ 
		::shutdown(pPar->pPair->proxy_server,SD_SEND);
		closesocket(pPar->pPair->proxy_server); 
			pPar->pPair->IsProxy_ServerClosed=TRUE;
			::OutputDebugString("close socket of proxy_server\n");
	} 

	if(pPar->pPair->IsUser_ProxyClosed==FALSE)
	{
		::shutdown(pPar->pPair->user_proxy,SD_SEND);
		closesocket(pPar->pPair->user_proxy);
		pPar->pPair->IsUser_ProxyClosed=TRUE;
		::OutputDebugString("close user_proxy\n");
	}
	::OutputDebugString("a session finished\n\n");
	return 1; 
} 

int StartProxy()
{
	StartServer();
	return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美影院午夜播放| 精品国产亚洲在线| 日韩三区在线观看| 国产精品久久久久毛片软件| 国产精品久久久久久久久搜平片| 国产精品久久久久久久午夜片| 亚洲乱码一区二区三区在线观看| 日韩av一区二| 成人97人人超碰人人99| 欧美久久久久久蜜桃| 国产亚洲福利社区一区| 亚洲午夜视频在线| 国产盗摄一区二区三区| 欧美精品一卡二卡| 国产精品久久久99| 久久国产综合精品| 色综合欧美在线视频区| 久久久无码精品亚洲日韩按摩| 亚洲国产精品影院| 国产91精品久久久久久久网曝门| 欧美日免费三级在线| 国产精品你懂的在线欣赏| 麻豆中文一区二区| 在线播放日韩导航| 中文字幕一区在线观看| 国产在线不卡一区| 欧美日韩精品一区二区三区蜜桃| 1区2区3区精品视频| 国产电影精品久久禁18| 日韩片之四级片| 亚洲成人7777| 欧美午夜精品久久久久久超碰| 国产精品欧美一级免费| 国产成人精品免费在线| 日韩免费视频一区二区| 天涯成人国产亚洲精品一区av| 99久久精品国产导航| 国产精品久久久久久久第一福利| 99免费精品在线| 欧美激情一区二区三区四区| 国产曰批免费观看久久久| 在线成人av影院| 成人免费在线播放视频| 成人av中文字幕| 国产精品美女久久福利网站| 国产成人免费在线观看不卡| 久久一区二区三区国产精品| 免费三级欧美电影| 欧美成人精品1314www| 免费xxxx性欧美18vr| 色哟哟一区二区| 一区二区免费在线| 欧美日韩一级片网站| 免费在线视频一区| 日韩视频一区二区三区在线播放| 亚洲一线二线三线视频| 91久久精品国产91性色tv| 亚洲最快最全在线视频| 在线不卡中文字幕| 韩国欧美一区二区| 日韩欧美一级二级| 国产成人高清在线| 伊人开心综合网| 91精品婷婷国产综合久久竹菊| 亚洲美女在线国产| 欧美精品一区二区三区久久久| 国产一区二区免费视频| 国产精品久久久久影院老司| 粉嫩在线一区二区三区视频| 中文字幕佐山爱一区二区免费| 欧美性videosxxxxx| 三级欧美在线一区| 在线观看www91| 7799精品视频| 激情都市一区二区| 国产精品二三区| 99视频国产精品| 天天av天天翘天天综合网| 69堂精品视频| 日韩精品欧美精品| 久久综合狠狠综合久久激情| 成人动漫精品一区二区| 亚洲一区二区黄色| 久久久久高清精品| caoporen国产精品视频| 中文字幕在线观看不卡视频| 欧美一区二区三区电影| 成人高清免费观看| 天堂一区二区在线| 国产精品欧美久久久久一区二区| 欧美久久一二区| 国产一区二区三区日韩| 中文字幕亚洲一区二区av在线| 5566中文字幕一区二区电影| 国产精品久久久一本精品| 欧美国产日韩在线观看| 欧美精品在欧美一区二区少妇| 国产成人亚洲综合a∨婷婷| 亚洲综合在线免费观看| 日韩精品一区二区三区中文精品| 成人黄色在线视频| 激情五月婷婷综合| 日韩高清在线不卡| 亚洲色图视频免费播放| 国产午夜精品一区二区三区嫩草| 在线成人av网站| 制服丝袜在线91| 色94色欧美sute亚洲13| 成人一区二区三区视频在线观看 | 国产69精品久久99不卡| 亚洲成人免费在线| 亚洲少妇屁股交4| 国产精品免费久久久久| 欧美精品一区在线观看| 欧美一区二区三区在线观看| 在线观看免费一区| 色哟哟一区二区在线观看| 看片的网站亚洲| 欧美精品乱码久久久久久| 一本到不卡精品视频在线观看| 国内精品不卡在线| 麻豆极品一区二区三区| 视频在线观看一区二区三区| 亚洲午夜久久久久久久久久久| 国产精品电影一区二区三区| 日韩精品一区在线观看| 日韩精品一区二区在线观看| 日韩视频在线永久播放| 91精品在线免费| 欧美一卡二卡三卡四卡| 欧美日本国产视频| 91精品欧美综合在线观看最新| 欧美在线视频日韩| 欧美另类变人与禽xxxxx| 欧美乱妇15p| 欧美一区二区三区爱爱| 日韩欧美国产成人一区二区| 亚洲精品在线观看视频| 久久亚洲春色中文字幕久久久| 欧美一区二区二区| 国产精品久久久久国产精品日日| 国产精品久久久久影院色老大| 欧美日韩在线一区二区| 亚洲欧美日韩一区二区三区在线观看| 久久午夜电影网| 久久久久久久综合日本| 亚洲国产精华液网站w| 国产亚洲综合在线| 国产精品久久久久久久第一福利 | 99视频精品在线| 91麻豆视频网站| 欧美日韩精品一区二区天天拍小说| 欧美日韩一级黄| 欧美一区二区三区公司| 国产日韩视频一区二区三区| 中文字幕不卡的av| 亚洲色图在线视频| 激情五月婷婷综合网| www.欧美日韩| 欧美裸体一区二区三区| 国产欧美一区二区精品性色超碰| 中文字幕亚洲成人| 日本不卡一区二区三区| 91丨九色丨尤物| 91.com在线观看| 国产日韩欧美精品电影三级在线 | 26uuu亚洲综合色| 色菇凉天天综合网| 在线精品观看国产| 亚洲精品国产精品乱码不99| 国产亚洲一区字幕| 亚洲欧洲精品成人久久奇米网| 亚洲综合偷拍欧美一区色| 日韩中文欧美在线| 91年精品国产| 日韩午夜激情免费电影| 1024亚洲合集| 美国毛片一区二区| 91亚洲国产成人精品一区二区三| 欧美日韩国产不卡| 伊人色综合久久天天人手人婷| 久久66热偷产精品| 欧美综合一区二区三区| 国产农村妇女毛片精品久久麻豆| 亚洲成人精品影院| 欧美在线999| 国产女人18毛片水真多成人如厕| 人妖欧美一区二区| 色视频欧美一区二区三区| 日韩精品一区二区三区在线观看| 国产精品久久久一区麻豆最新章节| 国产精选一区二区三区| 91麻豆精品国产91久久久久久久久| 亚洲欧美一区二区三区孕妇| 久久久三级国产网站| 午夜国产精品一区| 日本高清不卡一区| 国产精品全国免费观看高清| 久久99久久99精品免视看婷婷 | 欧美一卡二卡在线观看|