BaseSocket.h
2.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#if !defined(AFX_BASESOCKET_H__3B7A6664_5FBC_4A90_A732_2621F54D0A97__INCLUDED_)
#define AFX_BASESOCKET_H__3B7A6664_5FBC_4A90_A732_2621F54D0A97__INCLUDED_
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <fcntl.h>
#include <errno.h>
#include <string.h>
#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_)