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

📄 testdlg.cpp

📁 socket代理的C++源码,实现了代理服务器的大部分功能
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		else
		{
			if( !socSocks5.OpenSocket( pucIP, atoi( strProxyPort ), atoi( strLocalPort ) ) )
			{
				strProxyAlloPort.Format( "代理分配的端口:%d", socSocks5.GetProxyAlloPort() );
				GetDlgItem(IDC_lblProxyAlloPort)->SetWindowText( strProxyAlloPort );
				m_bOpen = true;
				m_bUDPMode = false;
			}
			else
			{
				MessageBox( "UDP socket using socks 5打开失败!", "错误" );
				return;
			}
		}
	}
	else
	{
		if( ((CButton*)GetDlgItem(IDC_chkGroup))->GetCheck() )
		{
			BYTE pucGroupIP[4];

			if( ((CButton*)GetDlgItem(IDC_optRoot))->GetCheck() )
			{
				m_bGroupType = true;
			}
			else
			{
				m_bGroupType = false;
			}

			((CIPAddressCtrl*)GetDlgItem(IDC_ipGroup))->GetAddress( 
				pucGroupIP[0], pucGroupIP[1], pucGroupIP[2], pucGroupIP[3] );

			if( !socUDP.OpenSocket( atoi( strLocalPort ), pucGroupIP, m_bGroupType ) )
			{
				m_bOpen = true;
				m_bUDPMode = true;
				m_bGroup = true;
			}
			else
			{
				MessageBox( "UDP socket打开失败!", "错误" );
				return;
			}
		}
		else
		{
			if( !socUDP.OpenSocket( atoi( strLocalPort ) ) )
			{
				m_bOpen = true;
				m_bUDPMode = true;
				m_bGroup = false;

				CString strLocalIP;
				int nLocalIP;
				if( !socUDP.GetLocalIP( strLocalIP, nLocalIP ) )
				{
					TRACE( "\nIP:%s,Port:%d", strLocalIP, nLocalIP );
				}
			}
			else
			{
				MessageBox( "UDP socket打开失败!", "错误" );
				return;
			}
		}
	}

	GetDlgItem(IDC_lblMode)->EnableWindow( false );
	GetDlgItem(IDC_optTCP)->EnableWindow( false );
	GetDlgItem(IDC_optUDP)->EnableWindow( false );
	
	GetDlgItem(IDC_chkGroup)->EnableWindow( false );
	GetDlgItem(IDC_optRoot)->EnableWindow( false );
	GetDlgItem(IDC_optLeaf)->EnableWindow( false );
	GetDlgItem(IDC_lblGroup)->EnableWindow( false );
	GetDlgItem(IDC_ipGroup)->EnableWindow( false );

	GetDlgItem(IDC_chkProxy)->EnableWindow( false );
	GetDlgItem(IDC_lblProxyIP)->EnableWindow( false );
	GetDlgItem(IDC_ipProxy)->EnableWindow( false );
	GetDlgItem(IDC_lblProxyPort)->EnableWindow( false );
	GetDlgItem(IDC_txtProxyPort)->EnableWindow( false );

	GetDlgItem(IDC_chkCheck)->EnableWindow( false );
	GetDlgItem(IDC_lblProxyUser)->EnableWindow( false );
	GetDlgItem(IDC_txtProxyUser)->EnableWindow( false );
	GetDlgItem(IDC_lblProxyPass)->EnableWindow( false );
	GetDlgItem(IDC_txtProxyPass)->EnableWindow( false );

	GetDlgItem(IDC_btnOpen)->EnableWindow( false );
	GetDlgItem(IDC_btnConnect)->EnableWindow( false );
	GetDlgItem(IDC_btnListen)->EnableWindow( false );
}

void CTestDlg::OnBnClickedbtnsend()
{
	BYTE pucIP[4];
	BYTE *pucSend;
	int nPos;
	int nPort;
	int nTextBytes;
	int nSendBytes;
	int nReturn;
	CString strSend;
	CString strPos;
	CString strPort;

	if( m_bOpen )
	{
		if( m_bSocMode )
		{
			if( m_bTCPMode )
			{
				GetDlgItem(IDC_txtSend)->GetWindowText( strSend );
				nTextBytes = strSend.GetLength();
				if( nTextBytes > 0 )
				{
					pucSend = new BYTE[nTextBytes];
				}
				else
				{
					return;
				}

				if( ((CButton*)GetDlgItem(IDC_optText))->GetCheck() )
				{
					memcpy( pucSend, strSend.GetBuffer( nTextBytes ), nTextBytes );
					nSendBytes = nTextBytes;
				}
				else if( ((CButton*)GetDlgItem(IDC_optByte))->GetCheck() )
				{
					nSendBytes = GetBytesFromString( strSend, pucSend );
					if( nSendBytes == -1 )
					{
						delete [] pucSend;
						MessageBox( "传输的数据输入有误!" );
						return;
					}
				}
				else
				{
					delete [] pucSend;
					MessageBox( "请先选择“数据模式”!" );
					return;
				}

				GetDlgItem(IDC_txtSocSub)->GetWindowText( strPos );
				nPos = atoi( strPos.GetBuffer(strPos.GetLength()) );

				nReturn = socServe.SendData( nPos, pucSend, nSendBytes );
				if( nReturn )
				{
					MessageBox( "服务socket发送数据失败!", "错误", MB_OK + MB_ICONSTOP );
				}

				delete [] pucSend;
			}
			else
			{
				GetDlgItem(IDC_txtSend)->GetWindowText( strSend );
				nTextBytes = strSend.GetLength();
				if( nTextBytes > 0 )
				{
					pucSend = new BYTE[nTextBytes];
				}
				else
				{
					return;
				}

				if( ((CButton*)GetDlgItem(IDC_optText))->GetCheck() )
				{
					memcpy( pucSend, strSend.GetBuffer( nTextBytes ), nTextBytes );
					nSendBytes = nTextBytes;
				}
				else if( ((CButton*)GetDlgItem(IDC_optByte))->GetCheck() )
				{
					nSendBytes = GetBytesFromString( strSend, pucSend );
					if( nSendBytes == -1 )
					{
						delete [] pucSend;
						MessageBox( "传输的数据输入有误!" );
						return;
					}
				}
				else
				{
					delete [] pucSend;
					MessageBox( "请先选择“数据模式”!" );
					return;
				}

				nReturn = socClient.SendData( pucSend, nSendBytes );
				if( nReturn )
				{
					MessageBox( "客户socket发送数据失败!", "错误", MB_OK + MB_ICONSTOP );
				}

				delete [] pucSend;
			}
		}
		else
		{
			if( m_bUDPMode )
			{
				GetDlgItem(IDC_txtSend)->GetWindowText( strSend );
				nTextBytes = strSend.GetLength();
				if( nTextBytes > 0 )
				{
					pucSend = new BYTE[nTextBytes];
				}
				else
				{
					return;
				}
				
				if( ((CButton*)GetDlgItem(IDC_optText))->GetCheck() )
				{
					memcpy( pucSend, strSend.GetBuffer( nTextBytes ), nTextBytes );
					nSendBytes = nTextBytes;
				}
				else if( ((CButton*)GetDlgItem(IDC_optByte))->GetCheck() )
				{
					nSendBytes = GetBytesFromString( strSend, pucSend );
					if( nSendBytes == -1 )
					{
						delete [] pucSend;
						MessageBox( "传输的数据输入有误!", "错误", MB_OK + MB_ICONSTOP );
						return;
					}
				}
				else
				{
					delete [] pucSend;
					MessageBox( "请先选择“数据模式”!", "错误", MB_OK + MB_ICONSTOP );
					return;
				}
				
				if( m_bGroup )
				{
					nReturn = socUDP.SendData( pucSend, nSendBytes );
				}
				else
				{
					((CIPAddressCtrl*)GetDlgItem(IDC_ipRemote))->GetAddress( 
						pucIP[0], pucIP[1], pucIP[2], pucIP[3] );
					
					GetDlgItem(IDC_txtRemotePort)->GetWindowText( strPort );
					nPort = atoi( strPort.GetBuffer(strPort.GetLength()) );
					
					nReturn = socUDP.SendData( pucIP, nPort, pucSend, nSendBytes );
				}
				if( nReturn )
				{
					MessageBox( "客户socket发送数据失败!", "错误", MB_OK + MB_ICONSTOP );
				}
				
				delete [] pucSend;
			}
			else
			{
				GetDlgItem(IDC_txtSend)->GetWindowText( strSend );
				nTextBytes = strSend.GetLength();
				if( nTextBytes > 0 )
				{
					pucSend = new BYTE[nTextBytes];
				}
				else
				{
					return;
				}
				
				if( ((CButton*)GetDlgItem(IDC_optText))->GetCheck() )
				{
					memcpy( pucSend, strSend.GetBuffer( nTextBytes ), nTextBytes );
					nSendBytes = nTextBytes;
				}
				else if( ((CButton*)GetDlgItem(IDC_optByte))->GetCheck() )
				{
					nSendBytes = GetBytesFromString( strSend, pucSend );
					if( nSendBytes == -1 )
					{
						delete [] pucSend;
						MessageBox( "传输的数据输入有误!", "错误", MB_OK + MB_ICONSTOP );
						return;
					}
				}
				else
				{
					delete [] pucSend;
					MessageBox( "请先选择“数据模式”!", "错误", MB_OK + MB_ICONSTOP );
					return;
				}
				
				((CIPAddressCtrl*)GetDlgItem(IDC_ipRemote))->GetAddress( 
					pucIP[0], pucIP[1], pucIP[2], pucIP[3] );
				
				GetDlgItem(IDC_txtRemotePort)->GetWindowText( strPort );
				nPort = atoi( strPort.GetBuffer(strPort.GetLength()) );
				
				nReturn = socSocks5.SendData( pucIP, nPort, pucSend, nSendBytes );
				if( nReturn )
				{
					MessageBox( "客户socket发送数据失败!", "错误", MB_OK + MB_ICONSTOP );
				}
				
				delete [] pucSend;
			}
		}
		GetDlgItem(IDC_txtSend)->SetFocus();
		GetDlgItem(IDC_txtSend)->SetWindowText( "" );
	}
	else
	{
		MessageBox( "请先打开Socket!", "错误", MB_OK + MB_ICONSTOP );
	}
}

void CTestDlg::OnBnClickedbtnclosesocket()
{
	if( m_bOpen )
	{
		if( m_bSocMode )
		{
			if( m_bTCPMode )
			{
				socServe.CloseSocket();
			}
			else
			{
				socClient.CloseSocket();
			}
		}
		else
		{
			if( m_bUDPMode )
			{
				socUDP.CloseSocket();
			}
			else
			{
				socSocks5.CloseSocket();
			}
		}

		m_bOpen = false;

		GetDlgItem(IDC_lblMode)->EnableWindow( true );
		GetDlgItem(IDC_optTCP)->EnableWindow( true );
		GetDlgItem(IDC_optUDP)->EnableWindow( true );
		
		GetDlgItem(IDC_lblTCPMode)->EnableWindow( true );
		GetDlgItem(IDC_optServe)->EnableWindow( true );
		GetDlgItem(IDC_optClient)->EnableWindow( true );

		if( !((CButton*)GetDlgItem(IDC_chkProxy))->GetCheck() )
		{
			GetDlgItem(IDC_chkGroup)->EnableWindow( true );
			if( ((CButton*)GetDlgItem(IDC_chkGroup))->GetCheck() )
			{
				GetDlgItem(IDC_optRoot)->EnableWindow( true );
				GetDlgItem(IDC_optLeaf)->EnableWindow( true );
				GetDlgItem(IDC_lblGroup)->EnableWindow( true );
				GetDlgItem(IDC_ipGroup)->EnableWindow( true );
			}
			else
			{
				GetDlgItem(IDC_optRoot)->EnableWindow( false );
				GetDlgItem(IDC_optLeaf)->EnableWindow( false );
				GetDlgItem(IDC_lblGroup)->EnableWindow( false );
				GetDlgItem(IDC_ipGroup)->EnableWindow( false );
			}
		}

		if( !((CButton*)GetDlgItem(IDC_chkGroup))->GetCheck() )
		{
			GetDlgItem(IDC_chkProxy)->EnableWindow( true );
			if( ((CButton*)GetDlgItem(IDC_chkProxy))->GetCheck() )
			{
				GetDlgItem(IDC_lblProxyIP)->EnableWindow( true );
				GetDlgItem(IDC_ipProxy)->EnableWindow( true );
				GetDlgItem(IDC_lblProxyPort)->EnableWindow( true );
				GetDlgItem(IDC_txtProxyPort)->EnableWindow( true );

				GetDlgItem(IDC_chkCheck)->EnableWindow( true );
				if( ((CButton*)GetDlgItem(IDC_chkCheck))->GetCheck() )
				{
					GetDlgItem(IDC_lblProxyUser)->EnableWindow( true );
					GetDlgItem(IDC_txtProxyUser)->EnableWindow( true );
					GetDlgItem(IDC_lblProxyPass)->EnableWindow( true );
					GetDlgItem(IDC_txtProxyPass)->EnableWindow( true );
				}
				else
				{
					GetDlgItem(IDC_lblProxyUser)->EnableWindow( false );
					GetDlgItem(IDC_txtProxyUser)->EnableWindow( false );
					GetDlgItem(IDC_lblProxyPass)->EnableWindow( false );
					GetDlgItem(IDC_txtProxyPass)->EnableWindow( false );
				}
			}
			else
			{
				GetDlgItem(IDC_lblProxyIP)->EnableWindow( false );
				GetDlgItem(IDC_ipProxy)->EnableWindow( false );
				GetDlgItem(IDC_lblProxyPort)->EnableWindow( false );
				GetDlgItem(IDC_txtProxyPort)->EnableWindow( false );
				
				GetDlgItem(IDC_chkCheck)->EnableWindow( false );
				GetDlgItem(IDC_lblProxyUser)->EnableWindow( false );
				GetDlgItem(IDC_txtProxyUser)->EnableWindow( false );
				GetDlgItem(IDC_lblProxyPass)->EnableWindow( false );
				GetDlgItem(IDC_txtProxyPass)->EnableWindow( false );
			}
		}

		GetDlgItem(IDC_btnOpen)->EnableWindow( true );
		GetDlgItem(IDC_btnConnect)->EnableWindow( true );
		GetDlgItem(IDC_btnListen)->EnableWindow( true );
	}
}

void CTestDlg::OnBnClickedBtnOpenftp()
{
	if (m_dlgFtp.m_hWnd == NULL)
	{
		m_dlgFtp.Create(IDD_DLG_FTP);
	}
	m_dlgFtp.ShowWindow(SW_SHOW);
}

⌨️ 快捷键说明

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