资源简介
基于VC++网络编程,SOCKET编程采用I/O完成模型,完成考试系统!
代码片段和文件信息
// 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;
}
/*
* 发送试卷
*/
BOOL CClientContext::AsyncSendPaper( void )
{
DWORD flags = 0; //标志
DWORD sendBytes =0; //发送字节数
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; //发送包头
wsaBuf[0].len = HEADELEN;
wsaBuf[1].buf = m_pServerView->m_cPaper; //试卷
wsaBuf[1].len = m_pServerView->m_usPaperLen; //长度
//发送数据
if (WSASend(m_s
wsaBuf
2
&sendBytes
flags
&m_oIO.overlapped
NULL) == SOCKET_ERROR)
{
if(ERROR_IO_PENDING != WSAGetLastError())//成功发起重叠操作
{
return FALSE;
}
}
return TRUE;
}
/*
* 接收数据
*/
BOOL CClientContext::AsyncRecvHead( void )
{
DWORD flags = 0; //标志
DWORD recvBytes =0; //发送字节数
ZeroMemory(&m_iIO OVERLAPPEDPLUSLEN);
m_iIO.type = IOReadHead;//操作类型
WSABUF wsaBuf;
wsaBuf.buf = (char*)&m_iIO.hdr; //接收包头
wsaBuf.len = HEADELEN; //长度
//读取数据
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(); //时间
AsyncRecvHead(); //继续接收包头
}else if (STATE == m_iIO.hdr.ustype) //接收包体
{
AsyncRecvBody(m_iIO.hdr.usLen);
}
}
/*
* 发送数据完毕处理
*/
void CClientContext::OnSendCompleted( DWORD dwIOSize )
{
//
}
/*
* 发送验证学号失败信息
*/
BOOL CClientContext::AsyncSendFailLoginMsg( void )
{
DWORD flags = 0; //标志
DWORD sendBytes =0; //发送字节数
ZeroMemory(&m_oIO OVERLAPPEDPLUSLEN);
m_oIO.type = IOWriteUnLogin; //操作类型
WSABUF wsaBuf;
m_oIO.hdr.ustype = STNAME; //数据包类型
m_oIO.hdr.usLen = 0; //试卷长度0
wsaBuf.buf = (char*)&m_oIO.hdr; //发送包头
wsaBuf.len = HE
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 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个文件信息
- 上一篇:谷歌C++編碼規範中文版
- 下一篇:算符优先文法处理算术表达式
相关资源
- windows网络编程_文件传输
- VC++基于OpenGL模拟的一个3维空间模型
- 基于VC++的SolidWorks二次开发SolidWorks
- 派克变换VC++源码(附文档)
- VC++ 串口
- VC++ 大富翁4_大富翁游戏源码
- VC++ 摄像头视频采集与回放源程序
- 转 VC++ 实现电子邮件(Email)发送
- 基于MFC的VC++仿QQ浏览器源码(雏形)
- VC++ 服务程序编写及安装与卸载
- VC++6.0番茄西红柿VAXvirsual assist X完美破
- 基于改进的fcm算法的图像分割vc++
- VC++6.0 绿色版,免安装,非常好用。
- Microsoft Visual C++ 2005 Redistributable Pack
- VC++MFC课程设计的学生成绩管理系统
- 大智慧365DLL插件设计
- VC++6.0汉化包
- VC++完整商业界面源码(再上传)
- VC++编程技术600个大型项目源码.rar
- VC++实现RSA加密算法
- VC++ 中国象棋经典游戏源代码
- 郁金香VC++游戏辅助视频教程
- C语言进阶源码---基于graphics实现图书
- 摄影测量相对定向VC++程序
- VC++数字图像处理典型算法及实现
- VC++酒店客房管理系统 MFC
- 车站计算机联锁vc++6.0程序代码
- VC++编程的第一个MFC工程Hello World
- VC++中实现复选下拉框CCheckComboBox
- VC++写的SMTP协议发附件超酷啊直接可以
评论
共有 条评论