📄 arwinserver_t.h
字号:
#ifndef ArWinServer_TH
#define ArWinServer_TH
#include <list>
#include <WinSock2.h>
#include <Ws2tcpip.h>
#include "..\public\ArNetInterface.h"
USE_NETPKG
//------------------------------------------------------------------------
#define CONTROL 0
#define DATA 1
//------------------------------------------------------------------------
class ArWinServer_T:public ArServer_T
{
public:
bool __stdcall Create(int iPort);
bool __stdcall Destroy();
bool __stdcall Open(void);
bool __stdcall Close(void);
bool __stdcall SetMutiCastAdrr(int iAddr);
bool __stdcall SetDataSocketOpt(bool bHasRcvBuffer = true, bool bHasSndBuffer = true,
bool bEnableLinger = true, int iUserRcvBufferLen = 1024);
bool __stdcall SetMessageSocketOpt(bool bHasRcvBuffer = true, bool bHasSndBuffer = true,
bool bEnableLinger = true, int iUserRcvBufferLen = 1024);
bool __stdcall SetMutiCastSocketOpt(bool bHasRcvBuffer = true, bool bHasSndBuffer = true,
bool bEnableLinger = true, int iUserRcvBufferLen = 1024);
int __stdcall ClientNum(void);
bool __stdcall ClientAddrss(int iIndex, unsigned long& ulAddress);
bool __stdcall CloseClient(unsigned long ulClientAddr);
int __stdcall SendData(unsigned long ulClientAddr, char* pcData, int iLength);
int __stdcall SendDataPackage(unsigned long ulClientAddr,char* pcData, int iLength);
int __stdcall BroadCastAllClients(char* pcData, int iDataLength);
bool __stdcall OnReceiveData(pOnReceiveData func);
bool __stdcall OnAccept(pOnConnect func);
bool __stdcall OnDisconnect(pOnConnect func);
ArWinServer_T(void* pPara);
~ArWinServer_T();
static void DestroyServerHeap(void);
public:
enum {MAX_DATA_BUFFER_SIZE = 1024};
struct ArClientInfo_T
{
SOCKET ConnectSocket;
ArSenderInfo_T SenderInfo;
bool bHasRead;
bool bStartReceiveData;
int iDataSize;
int iHasReadNum;
int iBufferSize;
WSAEVENT hEvent;
WSAOVERLAPPED Overlapped;
WSABUF DataBuf;
char* pBuffer;
char* pcData;
bool operator== (const ArClientInfo_T& Info)
{
return(ConnectSocket == Info.ConnectSocket);
}
};
struct ArAcceptSocketInfo_T
{
ArClientInfo_T ClientInfo;
ArWinServer_T* pServer;
};
struct ArDataPackage_T
{
unsigned char ucType;
unsigned char ucControlType;
int iDataSize;
unsigned char ucVerify[58];
};
struct ArRunInfo_T
{
bool bStartRead ;
int iHasRead;
char* pcData ;
ArDataPackage_T DataReceive;
};
struct ArAsyncPara_T
{
WSABUF DataBuf;
char* pBuffer;
WSAOVERLAPPED Overlapped;
};
enum {MAX_MSG_SIZE = 4096};
struct ArAsyncMessagePara_T
{
WSABUF DataBuf;
char* pBuffer;
WSAOVERLAPPED Overlapped;
};
char m_SendMessagerBuffer[MAX_MSG_SIZE];
enum {MAX_MUTICAST_MSG_SIZE = 1024};
char m_MutiCastBuffer[MAX_MUTICAST_MSG_SIZE];
private:
SOCKET m_ListenSocket;
SOCKET m_MessageSocket;
SOCKET m_MultiCastSocket;
struct sockaddr_in m_LocalAdrr;
struct sockaddr_in m_LocalMessageAdrr;
struct sockaddr_in m_MutiCastAdrr;
ArAsyncMessagePara_T m_MessageSocketPara;
ArAsyncPara_T m_ListenSocketPara;
std::list<ArClientInfo_T*> m_ConnectClientInfoList;
static HANDLE m_hHeap;
enum {MAX_EVENT_NUM = 15};
WSAEVENT m_EventArray[MAX_EVENT_NUM];
int m_iConnectClientNum;
int m_iMaxConnectClientNum;
int m_iMaxDataBufferSize;
int m_iMaxMsgBufferSize;
int m_iMaxMultCastMsgSize;
int m_iPort;
int m_iMaxClientNum;
int m_iMaxReceiveDataLength;
unsigned long m_ulThreadListen;
unsigned long m_ulThreadTestConnect;
unsigned long m_ulThreadMessage;
unsigned long m_ulThreadReadData;
bool m_bInitialOk;
bool m_bOpen;
bool m_bFirstCreate;
bool m_bServerExit;
bool m_bIsDestroy;
bool m_bDataHasRcvBuffer;
bool m_bDataHasSendBuffer;
bool m_bDataEnableLinger;
bool m_bMessageHasRcvBuffer;
bool m_bMessageHasSendBuffer;
bool m_bMessageEnableLinger;
bool m_bMultiCastHasRcvBuffer;
bool m_bMultiCastHasSendBuffer;
bool m_bMultiCastEnableLinger;
pOnReceiveData m_pOnReceiveFunc;
pOnConnect m_pOnConnect;
pOnConnect m_pOnDisConnect;
HANDLE m_hConnectEvent;
HANDLE m_hDisConnectEvent;
HANDLE m_hOnReadEvent;
void* m_pPara;
void* m_pThreadOnClientDisconnect;
enum {MAX_SERVER_DATA_BUFFER = 1024 * 1024};
char* m_pcDataSendBuffer;
bool FindClient(unsigned long ulClientAddr, ArClientInfo_T& Info);
void StartListenning(void);
void StartTestConnect(void);
void DisableAllClient(void);
void RemoveClient(int iIndex);
ArClientInfo_T* FindClient(WSAEVENT hEvent);
static unsigned int __stdcall SoketListenning(void* pParent);
static unsigned int __stdcall SoketMessage(void* pParent); //等待从其它机器发送过来的消息包
static unsigned int __stdcall WaitForData(void* pParent);
static unsigned int __stdcall ClientConnect(void* pParent);
bool CreateSocket(void);
void DestroyAllClient(void);
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -