⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 casyncsocketexdemodlg.cpp

📁 AsynSocketDemo.rar网络代码,可以设置代理,ssl加密. AsynSocketDemo.rar网络代码,可以设置代理,ssl加密. AsynSocketDemo.rar网络代码,
💻 CPP
字号:
// CAsyncSocketExDemoDlg.cpp : Implementierungsdatei
//

#include "stdafx.h"
#include "CAsyncSocketExDemo.h"
#include "CAsyncSocketExDemoDlg.h"
#include "VerifyCertDlg.h"

#include "MySocket.h"
#include ".\casyncsocketexdemodlg.h"

#include "CBase64Coding.hpp"

#include <string>
using namespace std;

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

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg-Dialogfeld f黵 Anwendungsbefehl "Info"

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialogfelddaten
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// Vom Klassenassistenten generierte 躡erladungen virtueller Funktionen
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV-Unterst黷zung
	//}}AFX_VIRTUAL

// Implementierung
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// Keine Nachrichten-Handler
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CCAsyncSocketExDemoDlg Dialogfeld

CCAsyncSocketExDemoDlg::CCAsyncSocketExDemoDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CCAsyncSocketExDemoDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CCAsyncSocketExDemoDlg)
	m_Host = _T("http://source.cenxi.net:8000/www.codeexchange.net/codes/downloads55/sourcecode/game/25811217Mir2Ei1.rar");
	m_referer = _T("http://source.cenxi.net:8000/www.codeexchange.net/dl_nolog.asp-id=188892");
	m_nPort = 0;
	m_ProxyPass = _T("");
	m_ProxyHost = _T("");
	m_ProxyUser = _T("");
	m_bUseAuth = FALSE;
	m_nProxyType = -1;
	m_nProxyPort = 0;
	m_bUseSsl = FALSE;
	//}}AFX_DATA_INIT
	// Beachten Sie, dass LoadIcon unter Win32 keinen nachfolgenden DestroyIcon-Aufruf ben鰐igt
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

CCAsyncSocketExDemoDlg::~CCAsyncSocketExDemoDlg()
{
	for (t_HashList::iterator iter = m_SslTrustedCertHashList.begin(); iter != m_SslTrustedCertHashList.end(); iter++)
		delete [] *iter;
}

void CCAsyncSocketExDemoDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CCAsyncSocketExDemoDlg)
	DDX_Control(pDX, IDC_RESPONSE, m_cResponse);
	DDX_Text(pDX, IDC_HOST, m_Host);
	DDX_Text(pDX, IDC_EDIT_REFERER, m_referer);
	DDX_Text(pDX, IDC_PORT, m_nPort);
	//DDV_MinMaxInt(pDX, m_nPort, 0, 65535);
	DDX_Text(pDX, IDC_PPASS, m_ProxyPass);
	DDV_MaxChars(pDX, m_ProxyPass, 255);
	DDX_Text(pDX, IDC_PHOST, m_ProxyHost);
	DDX_Text(pDX, IDC_PUSER, m_ProxyUser);
	DDV_MaxChars(pDX, m_ProxyUser, 255);
	DDX_Check(pDX, IDC_USEAUTH, m_bUseAuth);
	DDX_Radio(pDX, IDC_RADIO1, m_nProxyType);
	DDX_Text(pDX, IDC_PPORT, m_nProxyPort);
	DDX_Check(pDX, IDC_USESSL, m_bUseSsl);
	if (m_nProxyType)
		DDV_MinMaxInt(pDX, m_nProxyPort, 1, 65535);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CCAsyncSocketExDemoDlg, CDialog)
	//{{AFX_MSG_MAP(CCAsyncSocketExDemoDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDOK, OnConnect)
	ON_WM_CLOSE()
	ON_MESSAGE(WM_USER, OnVerifyCert)
	//}}AFX_MSG_MAP
	ON_BN_CLICKED(IDC_BUTTON_SEND, OnBnClickedButtonSend)
	ON_WM_TIMER()
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CCAsyncSocketExDemoDlg Nachrichten-Handler

BOOL CCAsyncSocketExDemoDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Hinzuf黦en des Men黚efehls "Info..." zum Systemmen?

	// IDM_ABOUTBOX muss sich im Bereich der Systembefehle befinden.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Symbol f黵 dieses Dialogfeld festlegen. Wird automatisch erledigt
	//  wenn das Hauptfenster der Anwendung kein Dialogfeld ist
	SetIcon(m_hIcon, TRUE);			// Gro遝s Symbol verwenden
	SetIcon(m_hIcon, FALSE);		// Kleines Symbol verwenden

	// ZU ERLEDIGEN: Hier zus鋞zliche Initialisierung einf黦en
	m_pMySocket=0;
	m_nProxyType=0;
	UpdateData(FALSE);

	return TRUE;  // Geben Sie TRUE zur點k, au遝r ein Steuerelement soll den Fokus erhalten
}

void CCAsyncSocketExDemoDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// Wollen Sie Ihrem Dialogfeld eine Schaltfl鋍he "Minimieren" hinzuf黦en, ben鰐igen Sie
//  den nachstehenden Code, um das Symbol zu zeichnen. F黵 MFC-Anwendungen, die das
//  Dokument/Ansicht-Modell verwenden, wird dies automatisch f黵 Sie erledigt.

void CCAsyncSocketExDemoDlg::OnPaint()
{
	if (IsIconic())
	{
		CPaintDC dc(this); // Ger鋞ekontext f黵 Zeichnen

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Symbol in Client-Rechteck zentrieren
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Symbol zeichnen
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// Die Systemaufrufe fragen den Cursorform ab, die angezeigt werden soll, w鋒rend der Benutzer
//  das zum Symbol verkleinerte Fenster mit der Maus zieht.
HCURSOR CCAsyncSocketExDemoDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

void CCAsyncSocketExDemoDlg::OnConnect()
{
	//Validate all input fields
	if (!UpdateData(TRUE))
		return;
	if (m_nProxyType!=0)
	{
		if (m_ProxyHost=="")
		{
			AfxMessageBox("Please enter the proxy host!");
			return;
		}
		if (m_nProxyPort<1 || m_nProxyPort>65535)
		{
			AfxMessageBox("Please enter a valid port for the proxy!");
			return;
		}
	}
	if (((m_nProxyType==3) || (m_nProxyType==4)) && m_bUseAuth)
	{
		if (m_ProxyUser=="")
		{
			AfxMessageBox("Please enter the username for the proxy server!");
			return;
		}
		if (m_ProxyPass=="")
		{
			AfxMessageBox("Please enter the password for the proxy server!");
			return;
		}
	}
	if (m_Host=="")
	{
		AfxMessageBox("Please enter a server!");
		return;
	}
	//if (m_nPort<0 || m_nPort>65535)
	//{
	//	AfxMessageBox("Please enter a valid port for the server!");
	//	return;
	//}

	//If connected, close old connection
	if (m_pMySocket)
		delete m_pMySocket;
	m_cResponse.SetWindowText("");
	m_pMySocket=new CMySocket(&m_cResponse, &m_SslTrustedCertHashList);

	if (m_bUseSsl)
		m_pMySocket->AddLayer(m_pMySocket->m_pSslLayer);

	//Set the type of the proxy
	if (m_nProxyType)
	{
		if (m_nProxyType==1)
			m_pMySocket->m_pProxyLayer->SetProxy(PROXYTYPE_SOCKS4,m_ProxyHost,m_nProxyPort);
		else if (m_nProxyType==2)
			m_pMySocket->m_pProxyLayer->SetProxy(PROXYTYPE_SOCKS4A,m_ProxyHost,m_nProxyPort);
		else if (m_nProxyType==3 && !m_bUseAuth)
			m_pMySocket->m_pProxyLayer->SetProxy(PROXYTYPE_SOCKS5,m_ProxyHost,m_nProxyPort);
		else if (m_nProxyType==3 && m_bUseAuth)
			m_pMySocket->m_pProxyLayer->SetProxy(PROXYTYPE_SOCKS5,m_ProxyHost,m_nProxyPort,m_ProxyUser,m_ProxyPass);
		else if (m_nProxyType==4 && !m_bUseAuth)
			m_pMySocket->m_pProxyLayer->SetProxy(PROXYTYPE_HTTP11,m_ProxyHost,m_nProxyPort);
		else if (m_nProxyType==4 && m_bUseAuth)
			m_pMySocket->m_pProxyLayer->SetProxy(PROXYTYPE_HTTP11,m_ProxyHost,m_nProxyPort,m_ProxyUser,m_ProxyPass);
		else
			m_pMySocket->m_pProxyLayer->SetProxy(PROXYTYPE_NOPROXY);
		VERIFY(m_pMySocket->AddLayer(m_pMySocket->m_pProxyLayer));
	}

	m_pMySocket->Create();

	if (m_bUseSsl)
		m_pMySocket->m_pSslLayer->InitClientSSL();

	//http://source.cenxi.net:8000/www.codeexchange.net/codes/downloads55/sourcecode/game/25811217Mir2Ei1.rar
	this->m_pMySocket->init( m_Host.GetBuffer(0), m_nPort, "", m_referer.GetBuffer(0) ); 


	//sendRequest("/www.codeexchange.net/codes/downloads55/sourcecode/game/25811217Mir2Ei1.rar", "source.cenxi.net", 8000, 0, "", "http://source.cenxi.net:8000/www.codeexchange.net/dl_nolog.asp-id=188892");

	sockaddr_in	sa;
	hostent* hp = gethostbyname ( m_pMySocket->getHostAddr().c_str() );
	if( hp )
	{
		memcpy (&sa.sin_addr, hp->h_addr, hp->h_length); 
		BOOL res=m_pMySocket->Connect( inet_ntoa( sa.sin_addr ), m_pMySocket->getHostPort());
		//Connect
		//BOOL res=m_pMySocket->Connect(m_Host,m_nPort);
		if (!res)
			if (GetLastError()!=WSAEWOULDBLOCK)
			{
				if (m_nProxyType)
					AddStringToLog("Error: Can't connect to proxy server.");
				else
					AddStringToLog("Error: Can't connect to server.");
				return;
			}
		AddStringToLog("Connecting, please wait...");
	}
	else
	{
		AddStringToLog("Error!!!");
	}
}

void CCAsyncSocketExDemoDlg::OnClose()
{
	if (m_pMySocket)
		delete m_pMySocket;
	m_pMySocket=0;
	CDialog::OnClose();
}

void CCAsyncSocketExDemoDlg::AddStringToLog(LPCTSTR pszString)
{
	CString str;
	m_cResponse.GetWindowText(str);
	str+=pszString;
	str+=_T("\r\n");
	m_cResponse.SetWindowText(str);
}

LRESULT CCAsyncSocketExDemoDlg::OnVerifyCert(WPARAM wParam, LPARAM lParam)
{
	t_SslCertData *pData = reinterpret_cast<t_SslCertData*>(wParam);
	if (!pData)
		return 0;

	CVerifyCertDlg dlg;
	dlg.m_CertData = *pData;
	int res = dlg.DoModal();
	if (res == IDOK)
	{
		if (dlg.m_bAlways)
			m_pMySocket->AddSslCertHashToTrustedList(pData->hash);
		m_pMySocket->m_pSslLayer->SetNotifyReply(pData->priv_data, SSL_VERIFY_CERT, 1);
	}
	else 
		m_pMySocket->m_pSslLayer->SetNotifyReply(pData->priv_data, SSL_VERIFY_CERT, 0);
	delete pData;


	return 0;
}

void CCAsyncSocketExDemoDlg::OnBnClickedButtonSend()
{
	//if( m_pMySocket )
	//{
	//	sockaddr_in	sa;
	//	hostent* hp = gethostbyname ("source.cenxi.net");
	//	memcpy (&sa.sin_addr, hp->h_addr, hp->h_length); 
	//	//inet_ntoa( sa.sin_addr )
	//    sendRequest("/www.codeexchange.net/codes/downloads55/sourcecode/game/25811217Mir2Ei1.rar", "source.cenxi.net", 8000, "", "http://source.cenxi.net:8000/www.codeexchange.net/dl_nolog.asp-id=188892");
	//	//http://source.cenxi.net:8000/www.codeexchange.net/dl_nolog.asp-id=188892
	//}
	//CString str;
	//str.Format("开始tick:%d",::GetTickCount());
	//AddStringToLog( str.GetBuffer(0) );
}

void CCAsyncSocketExDemoDlg::OnTimer(UINT nIDEvent)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值

	CDialog::OnTimer(nIDEvent);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -