| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- /*************************************************************************
- 【文件名】 NetServer.h
- 【功能模块和目的】 网络服务器端类头文件
- 【开发者及日期】 郑石诺 2015/07/19
- 【版本】 V1.0.0
- 【版权信息】 Copyright (C)2015 河南华谊网络科技有限公司
- 【更改记录】
- *************************************************************************/
- #pragma once
- #include "socketbase.h"
- /*************************************************************************
- 【类名】 CNetServer
- 【功能】
- 【接口说明】 网络服务器端类
- 【开发者及日期】 郑石诺 2015/07/19
- 【版本】 V1.0.0
- 【版权信息】 Copyright (C)2015 河南华谊网络科技有限公司
- 【更改记录】
- *************************************************************************/
- class CNetServer : public CSocketBase
- {
- private:
- typedef struct tagPER_IO_CONTEXT
- {
- OVERLAPPED m_Overlapped; // 每一个重叠网络操作的重叠结构(针对每一个Socket的每一个操作,都要有一个)
- SOCKET m_sockAccept; // 这个网络操作所使用的Socket
- WSABUF m_wsaBuf; // WSA类型的缓冲区,用于给重叠操作传参数的
- char m_szBuffer[PDU_MAX_DATA_LEN]; // 这个是WSABUF里具体存字符的缓冲区
- tagPER_IO_CONTEXT()
- {
- ZeroMemory(&m_Overlapped, sizeof(m_Overlapped));
- ZeroMemory( m_szBuffer, PDU_MAX_DATA_LEN );
- m_sockAccept = INVALID_SOCKET;
- m_wsaBuf.buf = m_szBuffer;
- m_wsaBuf.len = PDU_MAX_DATA_LEN;
- }
- ~tagPER_IO_CONTEXT()
- {
- if( m_sockAccept != INVALID_SOCKET )
- {
- shutdown(m_sockAccept, SD_BOTH);
- closesocket(m_sockAccept);
- m_sockAccept = INVALID_SOCKET;
- }
- }
- void resetBuffer()
- {
- ZeroMemory( m_szBuffer, PDU_MAX_DATA_LEN );
- }
- } PER_IO_CONTEXT, *PPER_IO_CONTEXT;
- public:
- CNetServer(CNetLinkMain* pParent);
- virtual ~CNetServer(void);
- bool create(int a_ListenPort);
- bool isAlive(void) { return true; }
- void onDisconnect(void) { }
- void doJob(OVERLAPPED* pOverLapped, DWORD BytesTransfered);
- private:
- PPER_IO_CONTEXT __newIoContext(void);
- void __deleteIoContext(PPER_IO_CONTEXT pIoContext);
- bool __postAccept(PPER_IO_CONTEXT pIoContext);
- private:
- CArray<PPER_IO_CONTEXT> m_ArrayIoContext;
- LPFN_ACCEPTEX m_lpfnAcceptEx;
- LPFN_GETACCEPTEXSOCKADDRS m_lpfnGetAcceptExSockAddrs;
- };
|