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

📄 testdlg.cpp

📁 socket代理的C++源码,实现了代理服务器的大部分功能
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// TestDlg.cpp : 实现文件
//

#include "stdafx.h"
#include "Test.h"
#include "TestDlg.h"
#include ".\testdlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// 用于应用程序“关于”菜单项的 CAboutDlg 对话框

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

// 对话框数据
	enum { IDD = IDD_ABOUTBOX };

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

// 实现
protected:
	DECLARE_MESSAGE_MAP()
};

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

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

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()


// CTestDlg 对话框



CTestDlg::CTestDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CTestDlg::IDD, pParent)
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CTestDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CTestDlg, CDialog)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	//}}AFX_MSG_MAP
	ON_MESSAGE(WM_NETMES, OnNetMes)
	ON_BN_CLICKED(IDC_btnListen, OnBnClickedbtnlisten)
	ON_BN_CLICKED(IDC_btnOpen, OnBnClickedbtnopen)
	ON_BN_CLICKED(IDC_btnConnect, OnBnClickedbtnconnect)
	ON_BN_CLICKED(IDC_btnCloseSocket, OnBnClickedbtnclosesocket)
	ON_BN_CLICKED(IDC_btnClose, OnBnClickedbtnclose)
	ON_BN_CLICKED(IDC_btnSend, OnBnClickedbtnsend)
	ON_BN_CLICKED(IDC_optTCP, OnBnClickedopttcp)
	ON_BN_CLICKED(IDC_optUDP, OnBnClickedoptudp)
	ON_BN_CLICKED(IDC_optText, OnBnClickedopttext)
	ON_BN_CLICKED(IDC_optByte, OnBnClickedoptbyte)
	ON_BN_CLICKED(IDC_optServe, OnBnClickedoptserve)
	ON_BN_CLICKED(IDC_optClient, OnBnClickedoptclient)
	ON_BN_CLICKED(IDC_chkGroup, OnBnClickedchkgroup)
	ON_BN_CLICKED(IDC_optRoot, OnBnClickedoptroot)
	ON_BN_CLICKED(IDC_optLeaf, OnBnClickedoptleaf)
	ON_BN_CLICKED(IDC_chkProxy, OnBnClickedchkproxy)
	ON_BN_CLICKED(IDC_chkCheck, OnBnClickedchkcheck)
	ON_BN_CLICKED(IDC_BTN_OPENFTP, OnBnClickedBtnOpenftp)
END_MESSAGE_MAP()


// CTestDlg 消息处理程序

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

	// 将\“关于...\”菜单项添加到系统菜单中。

	// IDM_ABOUTBOX 必须在系统命令范围内。
	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);
		}
	}

	// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
	//  执行此操作
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标

	// TODO: 在此添加额外的初始化代码
	
	//默认为TCP模式
	OnBnClickedopttcp();
	((CButton*)GetDlgItem(IDC_optTCP))->SetCheck( 1 );

	//默认为收发字符串
	OnBnClickedopttext();
	
	//默认为TCP客户机模式
	OnBnClickedoptclient();

	GetDlgItem(IDC_txtLocalPort)->SetWindowText( "0" );
	((CIPAddressCtrl*)GetDlgItem(IDC_ipRemote))->SetAddress( 127, 0, 0, 1 );
	GetDlgItem(IDC_txtRemotePort)->SetWindowText( "5000" );

	((CIPAddressCtrl*)GetDlgItem(IDC_ipGroup))->SetAddress( 224, 0, 0, 3 );

	GetDlgItem(IDC_txtSocSub)->SetWindowText( "1" );

	m_bOpen = false;
	
	return TRUE;  // 除非设置了控件的焦点,否则返回 TRUE
}

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

// 如果向对话框添加最小化按钮,则需要下面的代码
//  来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
//  这将由框架自动完成。

void CTestDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // 用于绘制的设备上下文

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

		// 使图标在工作矩形中居中
		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;

		// 绘制图标
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

//当用户拖动最小化窗口时系统调用此函数取得光标显示。
HCURSOR CTestDlg::OnQueryDragIcon()
{
	return static_cast<HCURSOR>(m_hIcon);
}

void CTestDlg::OnOK() 
{	
	OnBnClickedbtnclose();
}

void CTestDlg::OnCancel() 
{	
	OnBnClickedbtnclose();
}

void CTestDlg::OnBnClickedbtnclose()
{
	OnBnClickedbtnclosesocket();
	CDialog::OnOK();
}

LRESULT	CTestDlg::OnNetMes(WPARAM wParam, LPARAM lParam)
{
	int nDataLen;
	int nCount;

	CString strRec;
	CString strText;
	CString strEnter;
	CString strRespond;

	int nRemotePort;
	CString strRemoteIP;

	strEnter.Format( "%c%c", 13, 10 );

	nDataLen = 8192;

	int nLocalPort;
	CString strLocalIP;

	SERVE_LPARAM *pData;

	const BYTE *pucTemp;

	switch( wParam )
	{
	case NET_TCPSERVERACCEPT:

		pData = (SERVE_LPARAM*)lParam;
		socServe.GetRemoteIP( pData->m_nSucSoc, strRemoteIP, nRemotePort );
		socServe.GetLocalIP( pData->m_nSucSoc, strLocalIP, nLocalPort );

		TRACE( "\nServe accept message receive.\nRemote ip:%s,remote port:%d\nLocal ip:%s,local port:%d", strRemoteIP, nRemotePort, strLocalIP, nLocalPort );
		break;

	case NET_TCPSERVERCLOSE:
		TRACE( "\nServe close message receive." );
		break;
	case NET_TCPSERVERRECEIVE:

		pData = (SERVE_LPARAM*)lParam;
		socServe.GetRemoteIP( pData->m_nSucSoc, strRemoteIP, nRemotePort );

		socServe.GetData( &pucTemp, nDataLen );
		if( nDataLen > 0 )
		{
			if( ((CButton*)GetDlgItem(IDC_optByte))->GetCheck() )
			{
				strRec = GetByteString( pucTemp, nDataLen );
			}
			else
			{
				strRec.GetBufferSetLength( nDataLen );
				for( nCount = 0; nCount < nDataLen; nCount++ )
				{
					strRec.SetAt( nCount, pucTemp[nCount] );
				}
			}

			GetDlgItem(IDC_txtReceive)->GetWindowText( strText );
			strRec = strText + strRec + strEnter;
			GetDlgItem(IDC_txtReceive)->SetWindowText( strRec );
			((CEdit*)GetDlgItem(IDC_txtReceive))->LineScroll( 
				((CEdit*)GetDlgItem(IDC_txtReceive))->GetLineCount() );
		}

		MessageBeep( MB_OK );

		TRACE( "\nServe receive message receive.\nRemote ip:%s,remote port:%d", strRemoteIP, nRemotePort );
		break;

	case NET_TCPSERVERSEND:
		TRACE( "\nServe send message receive." );
		break;
	case NET_TCPCLIENTCONNECTED:

		socClient.GetRemoteIP( strRemoteIP, nRemotePort );
		socClient.GetLocalIP( strLocalIP, nLocalPort );

		TRACE( "\nClient connect message receive.\nRemote ip:%s,remote port:%d\nLocal ip:%s,local port:%d", strRemoteIP, nRemotePort, strLocalIP, nLocalPort );
		break;

	case NET_TCPCLIENTCLOSE:
		TRACE( "\nClient close message receive." );
		break;
	case NET_TCPCLIENTRECEIVE:

		socClient.GetRemoteIP( strRemoteIP, nRemotePort );

		socClient.GetData( &pucTemp, nDataLen );
		if( nDataLen > 0 )
		{
			if( ((CButton*)GetDlgItem(IDC_optByte))->GetCheck() )
			{
				strRec = GetByteString( pucTemp, nDataLen );
			}
			else
			{
				strRec.GetBufferSetLength( nDataLen );
				for( nCount = 0; nCount < nDataLen; nCount++ )
				{
					strRec.SetAt( nCount, pucTemp[nCount] );
				}
			}

			GetDlgItem(IDC_txtReceive)->GetWindowText( strText );
			strRec = strText + strRec + strEnter;
			GetDlgItem(IDC_txtReceive)->SetWindowText( strRec );
			((CEdit*)GetDlgItem(IDC_txtReceive))->LineScroll( 
				((CEdit*)GetDlgItem(IDC_txtReceive))->GetLineCount() );
		}

		MessageBeep( MB_OK );

		TRACE( "\nClient receive message receive.\nRemote ip:%s,remote port:%d", strRemoteIP, nRemotePort );
		break;

	case NET_TCPCLIENTSEND:
		TRACE( "\nClient send message receive." );
		break;
		
	case NET_UDPCLOSE:
		TRACE( "\nUDP socket close message receive." );
		break;

	case NET_UDPRECEIVE:
		
		{
			UDP_LPARAM *pData;

			pData = (UDP_LPARAM*)lParam;
			strRemoteIP.Format( "%d.%d.%d.%d", 
				pData->m_uInfo.pucIP[0], pData->m_uInfo.pucIP[1], 
				pData->m_uInfo.pucIP[2], pData->m_uInfo.pucIP[3] );

			socUDP.GetData( &pucTemp, nDataLen );
			if( nDataLen > 0 )
			{
				if( ((CButton*)GetDlgItem(IDC_optByte))->GetCheck() )
				{
					strRec = GetByteString( pucTemp, nDataLen );
				}
				else
				{
					strRec.GetBufferSetLength( nDataLen );
					for( nCount = 0; nCount < nDataLen; nCount++ )
					{
						strRec.SetAt( nCount, pucTemp[nCount] );
					}
				}

				GetDlgItem(IDC_txtReceive)->GetWindowText( strText );
				strRec = strText + strRec + strEnter;
				GetDlgItem(IDC_txtReceive)->SetWindowText( strRec );
				((CEdit*)GetDlgItem(IDC_txtReceive))->LineScroll( 
					((CEdit*)GetDlgItem(IDC_txtReceive))->GetLineCount() );
			}

			/*
			//收到数据立即向远程主机返回收到信息
			strRespond.Format( "%d bytes data received!", nDataLen );
			nRespondLen = strRespond.GetLength();
			socUDP.SendData( pRemote->pucIP, pRemote->nPort, 
				(BYTE*)strRespond.GetBuffer(nRespondLen), nRespondLen );
			*/

			MessageBeep( MB_OK );

			/*	TRACE( "\nUDP socket receive message receive.\nRemote ip:%s,remote port:%d", 
					strRemoteIP, pRemote->nPort );*/
		}
		break;
		
	case NET_UDPSEND:
		TRACE( "\nUDP socket send message receive." );
		break;

	case NET_UDPSOCKS5CLOSE:
		TRACE( "\nUDP socket using socks5 close message receive." );
		break;

	case NET_UDPSOCKS5RECEIVE:
		
		{
			UDP_LPARAM *pData;

			pData = (UDP_LPARAM*)lParam;
			strRemoteIP.Format( "%d.%d.%d.%d", 
				pData->m_uInfo.pucIP[0], pData->m_uInfo.pucIP[1], 
				pData->m_uInfo.pucIP[2], pData->m_uInfo.pucIP[3] );

			socSocks5.GetData( &pucTemp, nDataLen );
			if( nDataLen > 0 )
			{
				if( ((CButton*)GetDlgItem(IDC_optByte))->GetCheck() )
				{
					strRec = GetByteString( pucTemp, nDataLen );
				}
				else
				{
					strRec.GetBufferSetLength( nDataLen );
					for( nCount = 0; nCount < nDataLen; nCount++ )
					{
						strRec.SetAt( nCount, pucTemp[nCount] );
					}
				}

				GetDlgItem(IDC_txtReceive)->GetWindowText( strText );
				strRec = strText + strRec + strEnter;
				GetDlgItem(IDC_txtReceive)->SetWindowText( strRec );
				((CEdit*)GetDlgItem(IDC_txtReceive))->LineScroll( 
					((CEdit*)GetDlgItem(IDC_txtReceive))->GetLineCount() );
			}

			/*
			//收到数据立即向远程主机返回收到信息
			strRespond.Format( "%d bytes data received!", nDataLen );
			nRespondLen = strRespond.GetLength();
			socUDP.SendData( pRemote->pucIP, pRemote->nPort, 
				(BYTE*)strRespond.GetBuffer(nRespondLen), nRespondLen );
			*/

			MessageBeep( MB_OK );

			TRACE( "\nUDP socket using socks5 receive message receive.\nRemote ip:%s,remote port:%d", 
				strRemoteIP, pData->m_uInfo.nPort );
		}

		break;

⌨️ 快捷键说明

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