資源簡(jiǎn)介
應(yīng)廣大朋友要求,這份代碼是我博客里的文章《完成端口詳解 - 手把手教你玩轉(zhuǎn)網(wǎng)絡(luò)編程系列之三》的配套代碼的客戶端部分

代碼片段和文件信息
#include?“StdAfx.h“
#include?“Client.h“
#include?“MainDlg.h“
#include?
#pragma?comment(lib“ws2_32.lib“)
#define?RELEASE_HANDLE(x)???????????????{if(x?!=?NULL?&&?x!=INVALID_HANDLE_VALUE){?CloseHandle(x);x?=?NULL;}}
#define?RELEASE(x)??????????????????????{if(x?!=?NULL?){delete?x;x=NULL;}}
CClient::CClient(void):
m_strServerIP(DEFAULT_IP)
m_strLocalIP(DEFAULT_IP)
m_nThreads(DEFAULT_THREADS)
m_pMain(NULL)
m_nPort(DEFAULT_PORT)
m_strMessage(DEFAULT_MESSAGE)
m_phWorkerThreads(NULL)
m_hConnectionThread(NULL)
m_hShutdownEvent(NULL)
{
}
CClient::~CClient(void)
{
this->Stop();
}
//////////////////////////////////////////////////////////////////////////////////
// 建立連接的線程
DWORD?WINAPI?CClient::_ConnectionThread(LPVOID?lpParam)
{
THREADPARAMS_CONNECTION*?pParams?=?(THREADPARAMS_CONNECTION*)?lpParam;
CClient*?pClient?=?(CClient*)pParams->pClient;
TRACE(“_AccpetThread啟動(dòng),系統(tǒng)監(jiān)聽中...\n“);
pClient->EstablishConnections();
TRACE(_T(“_ConnectionThread線程結(jié)束.\n“));
RELEASE(pParams);
return?0;
}
/////////////////////////////////////////////////////////////////////////////////
//?用于發(fā)送信息的線程
DWORD?WINAPI?CClient::_WorkerThread(LPVOID?lpParam)
{
THREADPARAMS_WORKER?*pParams?=?(THREADPARAMS_WORKER?*)lpParam;
CClient*?pClient?=?(CClient*)?pParams->pClient;
char?szTemp[MAX_BUFFER_LEN];
memset(?szTemp0sizeof(szTemp)?);
char?szRecv[MAX_BUFFER_LEN];
memset(szRecv0MAX_BUFFER_LEN);
int?nBytesSent?=?0;
int?nBytesRecv?=?0;
//CopyMemory(szTemppParams->szBuffersizeof(pParams->szBuffer));
//?向服務(wù)器發(fā)送信息
sprintf(?szTemp(“第1條信息:%s“)pParams->szBuffer?);
nBytesSent?=?send(pParams->sock?szTemp?strlen(szTemp)?0);
if?(SOCKET_ERROR?==?nBytesSent)?
{
TRACE(“錯(cuò)誤:發(fā)送1次信息失敗,錯(cuò)誤代碼:%ld\n“?WSAGetLastError());
return?1;?
}
TRACE(“向服務(wù)器發(fā)送信息成功:?%s\n“?szTemp);
pClient->ShowMessage(“向服務(wù)器發(fā)送信息成功:?%s“?szTemp);
Sleep(?3000?);
//?再發(fā)送一條信息
memset(?szTemp0sizeof(szTemp)?);
sprintf(?szTemp(“第2條信息:%s“)pParams->szBuffer?);
nBytesSent?=?send(pParams->sock?szTemp?strlen(szTemp)?0);
if?(SOCKET_ERROR?==?nBytesSent)?
{
TRACE(“錯(cuò)誤:發(fā)送第2次信息失敗,錯(cuò)誤代碼:%ld\n“?WSAGetLastError());
return?1;?
}
TRACE(“向服務(wù)器發(fā)送信息成功:?%s\n“?szTemp);
pClient->ShowMessage(“向服務(wù)器發(fā)送信息成功:?%s“?szTemp);
Sleep(?3000?);
//?發(fā)第3條信息
memset(?szTemp0sizeof(szTemp)?);
sprintf(?szTemp(“第3條信息:%s“)pParams->szBuffer?);
nBytesSent?=?send(pParams->sock?szTemp?strlen(szTemp)?0);
if?(SOCKET_ERROR?==?nBytesSent)?
{
TRACE(“錯(cuò)誤:發(fā)送第3次信息失敗,錯(cuò)誤代碼:%ld\n“?WSAGetLastError());
return?1;?
}
TRACE(“向服務(wù)器發(fā)送信息成功:?%s\n“?szTemp);
pClient->ShowMessage(“向服務(wù)器發(fā)送信息成功:?%s“?szTemp);
if(?pParams->nThreadNo==pClient->m_nThreads?)
{
pClient->ShowMessage(_T(“測(cè)試并發(fā)?%d?個(gè)線程完畢.“)pClient->m_nThreads);
}
return?0;
}
///////////////////////////////////////////////////////////////////////////////////
//?建立連接
bool??CClient::EstablishConnec
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件?????138752??2011-08-23?23:01??PiggyStressTestClient\Debug\PiggyStressTestClient.exe
?????文件???????8030??2011-08-26?22:33??PiggyStressTestClient\PiggyStressTestClient\Client.cpp
?????文件???????3438??2011-08-27?11:43??PiggyStressTestClient\PiggyStressTestClient\Client.h
?????文件???????5608??2011-08-27?11:43??PiggyStressTestClient\PiggyStressTestClient\MainDlg.cpp
?????文件???????1226??2009-10-09?00:41??PiggyStressTestClient\PiggyStressTestClient\MainDlg.h
?????文件??????60320??2009-10-09?17:17??PiggyStressTestClient\PiggyStressTestClient\PiggyStressTestClient.aps
?????文件???????1775??2009-10-07?00:50??PiggyStressTestClient\PiggyStressTestClient\PiggyStressTestClient.cpp
?????文件????????495??2009-10-09?00:18??PiggyStressTestClient\PiggyStressTestClient\PiggyStressTestClient.h
?????文件???????6128??2009-10-09?17:17??PiggyStressTestClient\PiggyStressTestClient\PiggyStressTestClient.rc
?????文件???????5796??2009-10-12?10:55??PiggyStressTestClient\PiggyStressTestClient\PiggyStressTestClient.vcproj
?????文件???????1413??2009-10-14?10:44??PiggyStressTestClient\PiggyStressTestClient\PiggyStressTestClient.vcproj.HAOTHINK.Hao?Wang.user
?????文件???????1405??2009-10-07?01:10??PiggyStressTestClient\PiggyStressTestClient\PiggyStressTestClient.vcproj.MYPC.Piggy.user
?????文件???????2813??2009-10-07?00:50??PiggyStressTestClient\PiggyStressTestClient\ReadMe.txt
?????文件??????21630??2003-07-23?17:52??PiggyStressTestClient\PiggyStressTestClient\res\PiggyStressTestClient.ico
?????文件????????411??2009-10-07?00:52??PiggyStressTestClient\PiggyStressTestClient\res\PiggyStressTestClient.rc2
?????文件????????193??2009-10-10?11:34??PiggyStressTestClient\PiggyStressTestClient\res\vssver2.scc
?????文件???????1016??2009-10-09?00:30??PiggyStressTestClient\PiggyStressTestClient\Resource.h
?????文件????????152??2009-10-07?00:50??PiggyStressTestClient\PiggyStressTestClient\stdafx.cpp
?????文件???????1820??2011-08-27?11:43??PiggyStressTestClient\PiggyStressTestClient\stdafx.h
?????文件???????1030??2009-10-07?00:50??PiggyStressTestClient\PiggyStressTestClient\targetver.h
?????文件????????594??2009-09-27?09:25??PiggyStressTestClient\PiggyStressTestClient\XPst
?????文件????????929??2009-10-12?10:55??PiggyStressTestClient\PiggyStressTestClient.sln
?????文件??????32768??2009-10-15?16:02??PiggyStressTestClient\PiggyStressTestClient.suo
?????目錄??????????0??2011-08-02?00:51??PiggyStressTestClient\PiggyStressTestClient\res
?????目錄??????????0??2011-08-24?20:33??PiggyStressTestClient\Debug
?????目錄??????????0??2011-08-24?20:33??PiggyStressTestClient\PiggyStressTestClient
?????目錄??????????0??2011-08-24?20:33??PiggyStressTestClient
-----------?---------??----------?-----??----
???????????????297742????????????????????27
............此處省略0個(gè)文件信息
評(píng)論
共有 條評(píng)論