#if !defined(AFX_BASESOCKET_H__3B7A6664_5FBC_4A90_A732_2621F54D0A97__INCLUDED_) #define AFX_BASESOCKET_H__3B7A6664_5FBC_4A90_A732_2621F54D0A97__INCLUDED_ #include #include #include #include #include #include #include "BaseDataTypeDef.h" #include "BaseSocketDef.h" #include "BaseObject.h" #include "BaseEvent.h" #include "BaseSocketSendThread.h" #include "BaseSocketReceiveThread.h" #include "DataExchangePipe.h" #define SOCKET_BUFFER_SIZE 8192 class CBaseSocket : public CBaseObject { public: CBaseSocket(); virtual ~CBaseSocket(); BOOL Connect( LPCTSTR lpszHostAddress, UINT nHostPort ); BOOL Create(UINT nSocketPort = 0, int nSocketType = SOCK_STREAM); // Overrides public: void Attach(SOCKET hSocket); BOOL Accept(CBaseSocket* pBaseSocket); BOOL SetNonBlocking(BOOL bNonBlocking = TRUE); BOOL NothingIsReceived(); void SetStatus(UINT nStatus); UINT GetStatus(); long Stop(BOOL bWaitForStopped = TRUE); long Start(BOOL bSendSocketData = FALSE); long SendData(DWORD nTimeOut); long PutData(void* pData, INT32 nDataLen, DWORD nTimeOut = 100); void Close(); long GetPeerName(char* IPAddress, long* plPort); int Listen(long nConnectBackblog = 5); virtual void OnReceive(int nErrorCode); virtual void OnClose(int nErrorCode); virtual void OnConnect(int nErrorCode); virtual void OnSend(int nErrorCode); virtual void OnAccept(int nErrorCode); // Attributes public: SOCKET m_hSocket; CBaseEvent m_SendAvailable; protected: CBaseSocketSendThread* m_pSendThread; CBaseSocketReceiveThread* m_pReceiveThread; //为了真正的释放new出来的两个线程的资源(不包括线程自身的资源),使用了下面两个变量 CBaseSocketSendThread* m_pSendThreadToDelete; CBaseSocketReceiveThread* m_pReceiveThreadToDelete; CDataExchangePipe* m_pDataExchangePipe; BYTE m_pRecvBuffer[SOCKET_BUFFER_SIZE]; UINT32 m_lRecvBufferPos; UINT m_nStatus; long m_lLastReceiveCount; }; #endif // !defined(AFX_BASESOCKET_H__3B7A6664_5FBC_4A90_A732_2621F54D0A97__INCLUDED_)