⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 arwinserver_t.h

📁 wangchuanDll.rar 网络传输的DLL 源代码
💻 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 + -