TCP.h
上传用户:popouu88
上传日期:2013-02-11
资源大小:2894k
文件大小:2k
源码类别:

IP电话/视频会议

开发平台:

Visual C++

  1. // TCP.h: interface for the CTCP class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #ifndef __TCP_H__
  5. #define __TCP_H__
  6. #include "winsock2.h"
  7. #include "Buffer.h"
  8. #include "Thread.h"
  9. #define   MAX_IP_SIZE   100
  10. class CTCP  
  11. {
  12. public:
  13.          CTCP();
  14. virtual ~CTCP();
  15.     //取得本机的IP
  16. static char * GetIPAddressFromHostName( void );
  17. char * GetPeerName( void );
  18. char * GetSockName( void );
  19.     //用户子定义参数
  20. void     SetData( int data ){ user_data = data ; }
  21.     //取得用户子定义参数
  22. int      GetData( void ){ return user_data; }
  23.     //创建服务器
  24. bool     Create( void ( * OnAccept )( void *pContext , CTCP & server ) , void * pContext , const int port );
  25.     //接收连接
  26. bool     Accept( CTCP * client );
  27.     //连接服务器
  28. bool     Connect( const char * ip , const port );
  29.     //是否监听
  30. bool     IsListen( void ) { return this->s_listen != INVALID_SOCKET ; }
  31.     //是否连接
  32. bool     IsConnected( void );
  33.     //发送
  34. bool     Send( CBuffer & buffer );
  35.     //接收
  36. bool     Receive( CBuffer & buffer , struct timeval * timeout = NULL );
  37.     //添加到访问链表
  38. void     AddVisitList( void ){ this->visit ++; }
  39.     //从访问链表中移去
  40. void     RemoveVisitList( void ){ this->visit --; }
  41.     //是否还在被他人访问
  42. bool     IsVisit( void ) { return this->visit > 0 ; }
  43.     //关闭连接
  44. void     Close( void );
  45. protected:
  46. static   void  OnAccept( void * pContext );
  47. private:
  48.     //转给坚听线程的指针信息
  49. class  CInfo
  50. {
  51. public:
  52.         CInfo( void ( * Func )( void *pContext , CTCP & server ) , void * p , void * pThis )
  53. {
  54. this->OnAccept = Func; this->pContext = p ; this->pThis = (CTCP * )pThis ;
  55. }//本类指针
  56. CTCP * pThis;
  57.         //回调函数  
  58. void ( * OnAccept )( void *pContext , CTCP & server ) ;
  59.         //回调函数的用户自定义参数
  60.     void  * pContext;
  61. };//把单个字节组合成一个整型
  62. union BYTE_INT_UNION
  63. {
  64. struct
  65. {
  66. BYTE a;
  67. BYTE b;
  68. BYTE c;
  69. BYTE d;
  70. }B;
  71. int  iValue;
  72. };
  73. //坚听socket
  74. SOCKET   s_listen;
  75.     //连接上来的socket数组
  76. SOCKET   connect_socket;
  77.     //引用次数
  78. static    int  InitTCPNumber;
  79.     //用户自定义参数
  80. int       user_data;
  81.     //线程访问次数
  82. int       visit;
  83.     //发送临界区
  84. CRITICAL_SECTION  session;
  85. };
  86. #endif