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

📄 testtcp.cpp

📁 tcp for test
💻 CPP
字号:
// TestTCP.cpp : Defines the class behaviors for the application.
//

#include "stdafx.h"
#include "TestTCP.h"
#include "TestTCPDlg.h"
#include "AfxSock.h"

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

/////////////////////////////////////////////////////////////////////////////
// CTestTCPApp

BEGIN_MESSAGE_MAP(CTestTCPApp, CWinApp)
	//{{AFX_MSG_MAP(CTestTCPApp)
		// NOTE - the ClassWizard will add and remove mapping macros here.
		//    DO NOT EDIT what you see in these blocks of generated code!
	//}}AFX_MSG
	ON_COMMAND(ID_HELP, CWinApp::OnHelp)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTestTCPApp construction

CTestTCPApp::CTestTCPApp()
{
	// TODO: add construction code here,
	// Place all significant initialization in InitInstance
}

/////////////////////////////////////////////////////////////////////////////
// The one and only CTestTCPApp object

CTestTCPApp theApp;

/////////////////////////////////////////////////////////////////////////////
// CTestTCPApp initialization

BOOL CTestTCPApp::InitInstance()
{
	AfxEnableControlContainer();
	if(!AfxSocketInit())
	{
		AfxMessageBox("Windows sockets initialization failed.");
		//	return FALSE;
	}
	// Standard initialization
	// If you are not using these features and wish to reduce the size
	//  of your final executable, you should remove from the following
	//  the specific initialization routines you do not need.

#ifdef _AFXDLL
	Enable3dControls();			// Call this when using MFC in a shared DLL
#else
	Enable3dControlsStatic();	// Call this when linking to MFC statically
#endif

	CTestTCPDlg dlg;
	m_pMainWnd = &dlg;
	int nResponse = dlg.DoModal();
	if (nResponse == IDOK)
	{
		// TODO: Place code here to handle when the dialog is
		//  dismissed with OK
	}
	else if (nResponse == IDCANCEL)
	{
		// TODO: Place code here to handle when the dialog is
		//  dismissed with Cancel
	}

	// Since the dialog has been closed, return FALSE so that we exit the
	//  application, rather than start the application's message pump.
	return FALSE;
}



int CTestTCPApp::UTF8_Encode(UCHAR* descBuff,CString strBuff)
{
	BYTE btHighBit = 0x00, btMidBit = 0x00, btLowBit = 0x00;
	CHAR pBuff[1024 * 8];
	strcpy(pBuff,LPCTSTR(strBuff));
	int nLen = strlen(pBuff);
	pBuff[nLen+1] = '\0';
	wchar_t wcBuff[1024 * 8];
	MultiByteToWideChar(CP_ACP,0,pBuff,nLen,wcBuff,nLen);
	wcBuff[nLen] = L'\0';
	int nDesBuffPos = 2;
	int nByteCount = 0;
	for(int i = 0 ; i < nLen ; i ++){
		if(wcBuff[i] < 128){
			btHighBit = 0x00;
			btHighBit = btHighBit | wcBuff[i];
			descBuff[nDesBuffPos] = btHighBit;
			nDesBuffPos ++;
			nByteCount++;
		}
		else{
			btHighBit = 0xE0;
			BYTE bt = 0x0;
			wchar_t wc = wcBuff[i];
			bt = wc >> 12;
			btHighBit = btHighBit | bt ;
			descBuff[nDesBuffPos] = btHighBit ;
			nDesBuffPos ++;

			btMidBit = 0x80;
			bt = 0x0;
			wc = wcBuff[i];
			bt = wc >> 6;
			bt = bt & 0x3F;
			btMidBit = btMidBit | bt;
			descBuff[nDesBuffPos] = btMidBit;
			nDesBuffPos ++;

			btLowBit = 0x80;
			bt = 0x0;
			wc = wcBuff[i];
			bt = bt | wc;
			bt = bt & 0x3F;
			btLowBit = btLowBit | bt;
			descBuff[nDesBuffPos] = btLowBit;
			nDesBuffPos ++;
			nByteCount += 3;
			nLen -= 1;

		}
	}

	BYTE btLen = 0x0;
	btLen = btLen | nByteCount;
	descBuff[1] = btLen;

	nByteCount = nByteCount >> 8;
	btLen = 0x0;
	btLen = btLen | nByteCount;
	descBuff[0] = btLen;

//	OutputDebugString("Encode OK!\n");
	return nDesBuffPos ;

}

CString CTestTCPApp::UTF8_Decode(UCHAR* pBuff,INT nBuffLen)
{
	UCHAR szDesBuff[1024 * 8];
	memset(szDesBuff,0,sizeof(szDesBuff));

	BYTE btHighBit = 0x00, btMidBit = 0x00, btLowBit = 0x00;
	INT nDesBuffpos = 0;
	CString strDecode;
//	LPTSTR p = strDecode.GetBuffer(nBuffLen);
//	m_nUTF8Len = 0;
//	m_nUTF8Len = pBuff[0] | m_nUTF8Len ;
//	m_nUTF8Len = m_nUTF8Len << 8;
//	m_nUTF8Len = pBuff[1] | m_nUTF8Len ;
	for( INT i = 2 ; i < nBuffLen ; i ++ ){
		if( pBuff[i] < 128){
			szDesBuff[nDesBuffpos] = pBuff[i];
			nDesBuffpos ++;
			continue;
		}
		if( pBuff[i] >= 224 ){
			btHighBit = pBuff[i] - 224 ;
			btHighBit = btHighBit << 4;
			i++;
			btMidBit = pBuff[i] - 128 ;
			BYTE bt = btMidBit;
			bt = bt >> 2;
			btHighBit = btHighBit | bt ;
			btMidBit = btMidBit << 6;
			i++;
			btLowBit = pBuff[i] - 128 ;
			btMidBit = btMidBit | btLowBit;

			wchar_t wc = 0x0000;
			wc = wc | btHighBit ;
			wc = wc << 8;
			wc = wc | btMidBit ;

			char pp[3];
			WideCharToMultiByte(CP_ACP,0,&wc,2,pp,2,NULL,NULL);
			pp[3] = '\0';
			szDesBuff[nDesBuffpos] = pp[0];
			nDesBuffpos ++;
			szDesBuff[nDesBuffpos] = pp[1];
			nDesBuffpos ++;
			continue;
		}
	}

	strDecode = szDesBuff;
	return strDecode;
}

CString CTestTCPApp::URLGB2312_Decode(CString str)//URLDecoder GB2312解码
{
	INT nLen = str.GetLength();
	TCHAR* pBuff = new TCHAR[nLen + 1];
	INT nRec = 0;
	for( INT i = 0 ; i < nLen ; i ++ ){
		TCHAR ch = 	str.GetAt(i);
		if( (ch >='0' && ch <= '9') || (ch >= 'a' && ch <= 'z') || (ch >='A' && ch <= 'Z') 
		|| (ch == '-') || (ch == '*') || (ch == '_') || (ch == '.')){
			pBuff[nRec] = ch;
		}else if( ch == '+'){
			pBuff[nRec] = ' ';
		}else if( ch == '%'){
			i ++;
			BYTE bt = str.GetAt(i);
			BYTE bt1 = 0 , bt2 = 0;
			switch(bt){
			case '0':
				bt1 = 0x0;
				break;
			case '1':
				bt1 = 0x1;
				break;
			case '2':
				bt1 = 0x2;
				break;
			case '3':
				bt1 = 0x3;
				break;
			case '4':
				bt1 = 0x4;
				break;
			case '5':
				bt1 = 0x5;
				break;
			case '6':
				bt1 = 0x6;
				break;
			case '7':
				bt1 = 0x7;
				break;
			case '8':
				bt1 = 0x8;
				break;
			case '9':
				bt1 = 0x9;
				break;
			case 'A':
				bt1 = 0xa;
				break;
			case 'B':
				bt1 = 0xb;
				break;
			case 'C':
				bt1 = 0xc;
				break;
			case 'D':
				bt1 = 0xd;
				break;
			case 'E':
				bt1 = 0xe;
				break;
			case 'F':
				bt1 = 0xf;
				break;
			}
			i ++;
			bt = str.GetAt(i);
			switch(bt){
			case '0':
				bt2 = 0x0;
				break;
			case '1':
				bt2 = 0x1;
				break;
			case '2':
				bt2 = 0x2;
				break;
			case '3':
				bt2 = 0x3;
				break;
			case '4':
				bt2 = 0x4;
				break;
			case '5':
				bt2 = 0x5;
				break;
			case '6':
				bt2 = 0x6;
				break;
			case '7':
				bt2 = 0x7;
				break;
			case '8':
				bt2 = 0x8;
				break;
			case '9':
				bt2 = 0x9;
				break;
			case 'A':
				bt2 = 0xa;
				break;
			case 'B':
				bt2 = 0xb;
				break;
			case 'C':
				bt2 = 0xc;
				break;
			case 'D':
				bt2 = 0xd;
				break;
			case 'E':
				bt2 = 0xe;
				break;
			case 'F':
				bt2 = 0xf;
				break;
			}
			bt = 0x0;
			bt = bt | bt1;
			bt = bt << 4;
			bt = bt | bt2;
			pBuff[nRec] = bt;
		}
		nRec ++ ;
	}
	pBuff[nRec] = '\0';
	CString strRet = pBuff;
	delete []pBuff;
	return strRet;
}

CString CTestTCPApp::URLGB2312_Encode(CString str)//URLEncoder GB2312编码
{
	INT nLen = str.GetLength();
	CString strRet = "";
	for( INT i = 0 ; i < nLen ; i ++ ){
		TCHAR ch = 	str.GetAt(i);
		if( (ch >='0' && ch <= '9') || (ch >= 'a' && ch <= 'z') || (ch >='A' && ch <= 'Z') 
		|| (ch == '-') || (ch == '*') || (ch == '_') || (ch == '.')){
			CString str = strRet;
			strRet.Format("%s%c",str,ch);
		}else if( ch == ' '){
			strRet += '+';
		}else{
			strRet += "%";
			BYTE bt = 0;
			bt = ch;
			bt = bt >> 4;
			switch(bt){
			case 0x0:
				strRet += "0";
				break;
			case 0x1:
				strRet += "1";
				break;
			case 0x2:
				strRet += "2";
				break;
			case 0x3:
				strRet += "3";
				break;
			case 0x4:
				strRet += "4";
				break;
			case 0x5:
				strRet += "5";
				break;
			case 0x6:
				strRet += "6";
				break;
			case 0x7:
				strRet += "7";
				break;
			case 0x8:
				strRet += "8";
				break;
			case 0x9:
				strRet += "9";
				break;
			case 0xa:
				strRet += "A";
				break;
			case 0xb:
				strRet += "B";
				break;
			case 0xc:
				strRet += "C";
				break;
			case 0xd:
				strRet += "D";
				break;
			case 0xe:
				strRet += "E";
				break;
			case 0xf:
				strRet += "F";
				break;
			}
			bt = 0;
			bt = ch;
			bt = bt << 4;
			switch(bt){
			case 0x00:
				strRet += "0";
				break;
			case 0x10:
				strRet += "1";
				break;
			case 0x20:
				strRet += "2";
				break;
			case 0x30:
				strRet += "3";
				break;
			case 0x40:
				strRet += "4";
				break;
			case 0x50:
				strRet += "5";
				break;
			case 0x60:
				strRet += "6";
				break;
			case 0x70:
				strRet += "7";
				break;
			case 0x80:
				strRet += "8";
				break;
			case 0x90:
				strRet += "9";
				break;
			case 0xa0:
				strRet += "A";
				break;
			case 0xb0:
				strRet += "B";
				break;
			case 0xc0:
				strRet += "C";
				break;
			case 0xd0:
				strRet += "D";
				break;
			case 0xe0:
				strRet += "E";
				break;
			case 0xf0:
				strRet += "F";
				break;
			}
		}
	}
	
	return strRet;
}



⌨️ 快捷键说明

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