升龙物业 老版本 ocx IPO, 加密狗 转值班电话

NetServer.h 2.2KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. /*************************************************************************
  2. 【文件名】 NetServer.h
  3. 【功能模块和目的】 网络服务器端类头文件
  4. 【开发者及日期】 郑石诺 2015/07/19
  5. 【版本】 V1.0.0
  6. 【版权信息】 Copyright (C)2015 河南华谊网络科技有限公司
  7. 【更改记录】
  8. *************************************************************************/
  9. #pragma once
  10. #include "socketbase.h"
  11. /*************************************************************************
  12. 【类名】 CNetServer
  13. 【功能】
  14. 【接口说明】 网络服务器端类
  15. 【开发者及日期】 郑石诺 2015/07/19
  16. 【版本】 V1.0.0
  17. 【版权信息】 Copyright (C)2015 河南华谊网络科技有限公司
  18. 【更改记录】
  19. *************************************************************************/
  20. class CNetServer : public CSocketBase
  21. {
  22. private:
  23. typedef struct tagPER_IO_CONTEXT
  24. {
  25. OVERLAPPED m_Overlapped; // 每一个重叠网络操作的重叠结构(针对每一个Socket的每一个操作,都要有一个)
  26. SOCKET m_sockAccept; // 这个网络操作所使用的Socket
  27. WSABUF m_wsaBuf; // WSA类型的缓冲区,用于给重叠操作传参数的
  28. char m_szBuffer[PDU_MAX_DATA_LEN]; // 这个是WSABUF里具体存字符的缓冲区
  29. tagPER_IO_CONTEXT()
  30. {
  31. ZeroMemory(&m_Overlapped, sizeof(m_Overlapped));
  32. ZeroMemory( m_szBuffer, PDU_MAX_DATA_LEN );
  33. m_sockAccept = INVALID_SOCKET;
  34. m_wsaBuf.buf = m_szBuffer;
  35. m_wsaBuf.len = PDU_MAX_DATA_LEN;
  36. }
  37. ~tagPER_IO_CONTEXT()
  38. {
  39. if( m_sockAccept != INVALID_SOCKET )
  40. {
  41. shutdown(m_sockAccept, SD_BOTH);
  42. closesocket(m_sockAccept);
  43. m_sockAccept = INVALID_SOCKET;
  44. }
  45. }
  46. void resetBuffer()
  47. {
  48. ZeroMemory( m_szBuffer, PDU_MAX_DATA_LEN );
  49. }
  50. } PER_IO_CONTEXT, *PPER_IO_CONTEXT;
  51. public:
  52. CNetServer(CNetLinkMain* pParent);
  53. virtual ~CNetServer(void);
  54. bool create(int a_ListenPort);
  55. bool isAlive(void) { return true; }
  56. void onDisconnect(void) { }
  57. void doJob(OVERLAPPED* pOverLapped, DWORD BytesTransfered);
  58. private:
  59. PPER_IO_CONTEXT __newIoContext(void);
  60. void __deleteIoContext(PPER_IO_CONTEXT pIoContext);
  61. bool __postAccept(PPER_IO_CONTEXT pIoContext);
  62. private:
  63. CArray<PPER_IO_CONTEXT> m_ArrayIoContext;
  64. LPFN_ACCEPTEX m_lpfnAcceptEx;
  65. LPFN_GETACCEPTEXSOCKADDRS m_lpfnGetAcceptExSockAddrs;
  66. };