www.pudn.com > 2003090514065121890.zip > connPoolTest.cpp


// connPoolTest.cpp : Defines the entry point for the console application. 
// 
 
#include "stdafx.h" 
#include "connPoolTest.h" 
#include  
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// The one and only application object 
 
CWinApp theApp; 
 
using namespace std; 
 
DWORD DoTest(LPVOID pD); 
#define MY_SERVER_NAME	"my_svr" 
 
class CMyDisplay : public CFileOutputDisplay 
{//显示类 
public: 
	CMyDisplay(LPCSTR pszServerName,LPCSTR pszFileName):CFileOutputDisplay(pszServerName,pszFileName) 
	{}; 
	~CMyDisplay(){}; 
public: 
	BOOL PutLine(ErrorLevel eLevel,LPCSTR pszOutput) 
	{ 
		char szDesc[20]; 
		GetErrorLevelString(eLevel,szDesc); 
		printf("%d %s %s\n",(int)eLevel,szDesc,pszOutput); 
		return CFileOutputDisplay::PutLine(eLevel,pszOutput); 
	}; 
}; 
CMyDisplay glo_display(MY_SERVER_NAME,"log\\log_"); 
 
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) 
{ 
	int nRetCode = 0; 
 
	// initialize MFC and print and error on failure 
	if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) 
	{ 
		// TODO: change error code to suit your needs 
		cerr << _T("Fatal Error: MFC initialization failed") << endl; 
		nRetCode = 1; 
	} 
	else 
	{ 
		ASSERT(AfxSocketInit()); 
		DoTest(NULL); 
	} 
 
	return nRetCode; 
} 
 
DWORD DoTest(LPVOID pD) 
{//测试功能 
	CSocketPoolAdmin pa(MY_SERVER_NAME,&glo_display); 
	CSocketConnPara cp[3]; 
	cp[0].m_szRemoteAddr="127.0.0.1"; 
	cp[0].m_iRemotePort=9988; 
	cp[1]=cp[0]; 
	cp[2]=cp[0]; 
	pa.InitAllConnectionPara(3,cp); 
	pa.GetSleepInterval()=1; 
	pa.CreateDaemonThread(); 
 
	for(int i=0;i<60000;i++) 
	{ 
		int iSocketID; 
		CSocketImplement* pS = pa.GetFreeSocket(iSocketID); 
		if(pS) 
		{ 
			printf("get free SocketID = %d\n",iSocketID); 
			CTCPSocket* pSocket = pS->GetSocket(); 
			int iRet = pSocket->TestRead(0); 
			if(iRet != SP_ERR_NODATA) 
			{ 
				pa.SetErrorToSocket(iSocketID); 
				printf("\tsocket %d closed\n",iSocketID); 
			} 
			else 
			{//连接正常 
				BYTE bSend[10]="123456789"; 
				int iWrote=0,iRead=0; 
				iRet = pSocket->Send(10,bSend,iWrote); 
				if(iWrote != 10) 
				{//发送失败,说明连接出现问题 
					pa.SetErrorToSocket(iSocketID); 
					printf("\t\tsocket %d sendError\n",iSocketID); 
				} 
				else 
				{//发送成功,准备接收 
					BYTE bRecv[10]; 
					iRet = pSocket->RecvWithTimeOut(5,10,bRecv,iRead); 
					Sleep(1000*1); 
					if(iRead != 10) 
					{//接收失败,说明连接出现问题 
						pa.SetErrorToSocket(iSocketID); 
						printf("\t\t\tsocket %d recvError\n",iSocketID); 
					} 
					else 
					{//完成 
						pa.FreeSocket(iSocketID); 
						printf("socket %d send&recv OK\n",iSocketID); 
					} 
				} 
			} 
		} 
		else 
		{ 
			printf("no free Socket\n"); 
		} 
		Sleep(1000*2); 
	} 
	pa.StopDaemonThread(); 
 
	return 0; 
}