📄 testtcp.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 + -