-
大小: 148KB文件類型: .rar金幣: 2下載: 1 次發(fā)布日期: 2021-08-18
- 語言: C/C++
- 標(biāo)簽: VC++??網(wǎng)絡(luò)編程??
資源簡介
基于VC++網(wǎng)絡(luò)編程,SOCKET編程采用I/O完成模型,完成考試系統(tǒng)!

代碼片段和文件信息
//?ClientContext.cpp:?implementation?of?the?CClientContext?class.
//
//////////////////////////////////////////////////////////////////////
#include?“stdafx.h“
#include?“Server.h“
#include?“ClientContext.h“
#include?“ServerView.h“
#ifdef?_DEBUG
#undef?THIS_FILE
static?char?THIS_FILE[]=__FILE__;
#define?new?DEBUG_NEW
#endif
extern?CServerApp?theApp;
//////////////////////////////////////////////////////////////////////
//?Construction/Destruction
//////////////////////////////////////////////////////////////////////
CClientContext::CClientContext(SOCKET?s?CServerView*?pServView)
:m_s(s)
m_eState(CClientContext::UNKNOWN)
m_pServerView(pServView)
m_nGrade(-1)
m_bPulse(FALSE)
{
ZeroMemory(&m_iIO?OVERLAPPEDPLUSLEN);
ZeroMemory(&m_oIO?OVERLAPPEDPLUSLEN);
}
CClientContext::~CClientContext()
{
CancelIo((HANDLE)m_s);
closesocket(m_s);
m_pServerView?=?NULL;
}
/*
?*?發(fā)送試卷
?*/
BOOL?CClientContext::AsyncSendPaper(?void?)
{
DWORD flags?=?0; //標(biāo)志
DWORD sendBytes?=0; //發(fā)送字節(jié)數(shù)
ZeroMemory(&m_oIO?OVERLAPPEDPLUSLEN);
m_oIO.type?=?IOWritePAPER; //操作類型
WSABUF?wsaBuf[2];
m_oIO.hdr.ustype?=?PAPER; //試卷類型
m_oIO.hdr.usLen?=?m_pServerView->m_usPaperLen; //試卷長度
wsaBuf[0].buf?=?(char*)&m_oIO.hdr; //發(fā)送包頭
wsaBuf[0].len?=?HEADELEN;
wsaBuf[1].buf?=?m_pServerView->m_cPaper; //試卷
wsaBuf[1].len?=?m_pServerView->m_usPaperLen; //長度
//發(fā)送數(shù)據(jù)
if?(WSASend(m_s?
wsaBuf
2?
&sendBytes?
flags
&m_oIO.overlapped
NULL)?==?SOCKET_ERROR)
{
if(ERROR_IO_PENDING?!=?WSAGetLastError())//成功發(fā)起重疊操作
{
return?FALSE;
}
}
return?TRUE;
}
/*
?*?接收數(shù)據(jù)
?*/
BOOL?CClientContext::AsyncRecvHead(?void?)
{
DWORD flags?=?0; //標(biāo)志
DWORD recvBytes?=0; //發(fā)送字節(jié)數(shù)
ZeroMemory(&m_iIO?OVERLAPPEDPLUSLEN);
m_iIO.type?=?IOReadHead;//操作類型
WSABUF?wsaBuf;
wsaBuf.buf?=?(char*)&m_iIO.hdr; //接收包頭
wsaBuf.len?=?HEADELEN; //長度
//讀取數(shù)據(jù)
if?(WSARecv(m_s?
&wsaBuf
1?
&recvBytes?
&flags
&m_iIO.overlapped
NULL)?==?SOCKET_ERROR)
{
if(ERROR_IO_PENDING?!=?WSAGetLastError())
{
return?FALSE;
}
}
return?TRUE;
}
/*
?*?接收包頭完畢處理
?*/
void?CClientContext::OnRecvHeadCompleted(?DWORD?dwIOSize?)
{
if?(PULSE?==?m_iIO.hdr.ustype) //處理心跳包
{
m_bPulse?=?TRUE; //接收到心跳包
m_time?=?CTime::GetCurrentTime(); //時(shí)間
AsyncRecvHead(); //繼續(xù)接收包頭
}else?if?(STATE?==?m_iIO.hdr.ustype) //接收包體
{
AsyncRecvBody(m_iIO.hdr.usLen);
}
}
/*
?*?發(fā)送數(shù)據(jù)完畢處理
?*/
void?CClientContext::OnSendCompleted(?DWORD?dwIOSize?)
{
//
}
/*
?*?發(fā)送驗(yàn)證學(xué)號失敗信息
?*/
BOOL?CClientContext::AsyncSendFailLoginMsg(?void?)
{
DWORD flags?=?0; //標(biāo)志
DWORD sendBytes?=0; //發(fā)送字節(jié)數(shù)
ZeroMemory(&m_oIO?OVERLAPPEDPLUSLEN);
m_oIO.type?=?IOWriteUnLogin; //操作類型
WSABUF?wsaBuf;
m_oIO.hdr.ustype?=?STNAME; //數(shù)據(jù)包類型
m_oIO.hdr.usLen?=?0; //試卷長度0
wsaBuf.buf?=?(char*)&m_oIO.hdr; //發(fā)送包頭
wsaBuf.len?=?HE
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件???????6786??2008-01-24?20:10??10\10.6\Server\ClientContext.cpp
?????文件???????1681??2008-01-22?19:48??10\10.6\Server\ClientContext.h
?????文件???????2917??2008-01-23?11:34??10\10.6\Server\ClientManager.cpp
?????文件???????1271??2008-01-22?19:57??10\10.6\Server\ClientManager.h
?????文件?????????64??2009-10-22?22:10??10\10.6\Server\Exam.ldb
?????文件?????466944??2009-10-14?11:30??10\10.6\Server\Exam.mdb
?????文件???????3178??2008-01-23?16:02??10\10.6\Server\MainFrm.cpp
?????文件???????1548??2008-01-21?23:49??10\10.6\Server\MainFrm.h
?????文件??????90619??2006-12-26?21:07??10\10.6\Server\msado15.tlh
?????文件??????76614??2006-12-26?21:07??10\10.6\Server\msado15.tli
?????文件???????1078??2008-01-15?16:05??10\10.6\Server\res\Server.ico
?????文件????????398??2008-01-15?16:05??10\10.6\Server\res\Server.rc2
?????文件???????1078??2008-01-15?16:05??10\10.6\Server\res\ServerDoc.ico
?????文件????????478??2008-01-18?23:07??10\10.6\Server\res\Toolbar.bmp
?????文件????????824??2008-01-18?23:07??10\10.6\Server\Resource.h
?????文件??????28308??2009-10-14?11:11??10\10.6\Server\Server.aps
?????文件???????2413??2009-10-14?11:11??10\10.6\Server\Server.clw
?????文件???????4849??2008-01-22?21:26??10\10.6\Server\Server.cpp
?????文件???????4966??2008-01-16?15:57??10\10.6\Server\Server.dsp
?????文件????????738??2009-10-14?11:23??10\10.6\Server\Server.dsw
?????文件???????1439??2008-01-15?16:49??10\10.6\Server\Server.h
?????文件?????173056??2009-10-14?13:46??10\10.6\Server\Server.ncb
?????文件??????58880??2009-10-14?13:46??10\10.6\Server\Server.opt
?????文件???????2323??2009-10-22?22:10??10\10.6\Server\Server.plg
?????文件??????12070??2008-01-22?14:17??10\10.6\Server\Server.rc
?????文件???????1849??2008-01-22?23:37??10\10.6\Server\ServerAddrDlg.cpp
?????文件???????1486??2007-12-19?12:46??10\10.6\Server\ServerAddrDlg.h
?????文件???????1931??2008-01-22?08:26??10\10.6\Server\ServerDoc.cpp
?????文件???????1509??2008-01-22?08:25??10\10.6\Server\ServerDoc.h
?????文件??????22731??2008-01-23?16:42??10\10.6\Server\ServerView.cpp
............此處省略36個(gè)文件信息
評論
共有 條評論