毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 论文 >> 正文

SWFCDB的研究与探索 第6页

更新时间:2009-6-4:  来源:毕业论文
SWFCDB的研究与探索 第6页
CIocp(void);
 ~CIocp(void);
 friend IOCP_RET WINAPI IOCPStartAsThread(LPVOID lParam);
//声明服务器线程函数为该类友元函数,可以访问该类的私有成员
 friend DWORD WINAPI ServerWorkerThread(LPVOID lParam);
//声明服务器工作者线程函数为该类友元函数,可以访问该类的私有成员
 friend DWORD WINAPI ThreadPoolManager(LPVOID lParam);
//声明线程池管理者函数为该类友元函数
 friend DWORD WINAPI ThreadPoolWorker(LPVOID lParam); 
//声明线程池工作者线程函数为该类友元函数
//attributes
private:
 typedef LPIOCP_OVERLAPPED_DATA (*_GetIOCP_OVERLAPPED_DATA) (DWORD dwThreadID);
//定义完成端口内存管理接口GetIOCP_OVERLAPPED_DATA() 方法本类内回调
//函数原型。功能:从系统预先分配的 IOCP重叠结构“单I/O操作数据”缓冲区//取得一 IOCP重叠结构“单I/O操作数据”;如果成功,返回指向一IOCP重
//叠结构“单I/O操作数据”的指针;如果失败,返回NULL
 char cError[256]; 
//用于保存出错信息
char cServerIPList[16*16];
//保存服务器的IP列表,假设一个服务器的IP数目不超过16个
 std::list<DATA_STACK_ITEM> sendQueue;
//定义初次发送失败的数据队列,初次发送失败的数据都存入该队列中
 std::list<DATA_STACK_ITEM> recvQueue;
//定义未处理的数据队列,IOCP服务器工作者线程只负责收发数据,不处理接收到//的收据,将接收到的数据放入未处理数据队列中,交由数据处理线程处理数据
 CRITICAL_SECTION csSendQueue; 
//初次发送失败数据队列临界区
 CRITICAL_SECTION csRecvQueue; 
//接收数据队列临界区
 DWORD dwConnectCount;
//当前服务器连接客户端数
 HANDLE hCompletionPort;
//服务器完成端口句柄
 LPIOCP_RECV_CALLBACK pRecvCallBack;
//指向服务器接收到数据后,客户端对数据处理的回调函数
 HANDLE hRecvEvent;
//同步Event核心对象,当向接收数据队列临界区添加数据时,将其设为传信,通知线
//程池管理管理新加入了数据
 int iPort;
//保存服务器侦听端口号
 THREAD_POOL_PARAM threadPoolParam;
//传向线程池管理者线程参数
 bool bExit;
//true则服务器将关闭,false则服务器暂不关闭
 HANDLE hThreadServer;
//指向服务器线程句柄
 HANDLE hThreadPoolManager;
//指向线程池管理者线程句柄
 DWORD dwThreadID;
//服务器线程ID
public:
DWORD dwServerRecvedBytes;
//服务器从启动开始接受客户端发送的字节总数
DWORD dwServerSendedBytes;
//服务器从启动开始发送给客户端的字节总数
//operates
public:
 IOCP_RET WINAPI IOCPStart(LPIOCP_RECV_CALLBACK callback, int port, DWORD dwThreadPoolWorkerCount=5);
//启动IOCP服务器。callback 为指向对接收数据操作的回调函数,//dwThreadPoolWorkerCount 为处理接收数据创建的工作者线程数目,port 为服务 //器侦听端口号
 IOCP_RET IOCPClose(int iMaxWaitTime=10);
//关闭IOCP服务器,iMaxWaitTim为关闭服务器能承受的最大等待时间,以秒为单位
private:
 IOCP_RET IOCPRecvTaskInsertQueue(const LPPER_IO_DATA pPerIoData, const LPIOCP_OVERLAPPED_DATA pIOD);
// 处理接收操作,将接收到的任务插入任务队列
void IOCPGetServerIPList();
//获得服务器的IP地址列表
public:
 IOCP_RET IOCPSend(LPPER_IO_DATA pData); 
//发送数据操作
 char* IOCPGetLastError();
//返回错误信息
 DWORD IOCPGetClientCount();
//返回连接客户端数
 _GetIOCP_OVERLAPPED_DATA IOCPGetOverlappedData;
//完成端口内存管理接口 函数指针,用于从完成端口内存管理接口获得一 IOCP
//重叠结构“单I/O操作数据”
DWORD IOCPGetServerThreadID();
//返回服务器线程ID;
const char* IOCPGetServerIP(); 
//返回服务器IP地址,若有多IP,则是IP list
protected:
 virtual void IOCPRecv(const LPTASK_QUEUE_ITEM pTQI, CIocp* pIocp);
 //派生类用于处理接收到的数据,及接收数据后的操作
 virtual void IOCPAcceptClient(const SOCKET /*socket*/); 
 //派生类用于处理接受客户端连接操作
 virtual void IOCPClientClose();
 //派生类用于处理客户端关闭事件
};
4.4.5 客户端接口实现
客户端基于Event Select 异步I/O 模型设计,具体实现封装在CEventClient 类中。该类主要提供Connect(),Recv(),Send(),CloseClient(),ServerClosed()等函数完成与服务器通讯。
完成端口服务器接口和Event Select 客户端接口的实现见:Iocp.h 和 Iocp.cpp 两文件。

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] 下一页

SWFCDB的研究与探索 第6页下载如图片无法显示或论文不完整,请联系qq752018766
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©751com.cn 辣文论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。