欢迎来到虫虫下载站 | 资源下载 资源专辑 关于我们
虫虫下载站

tcpsocket.h

AsynSocketDemo.rar网络代码,可以设置代理,ssl加密. AsynSocketDemo.rar网络代码,可以设置代理,ssl加密. AsynSocketDemo.rar网络代码,
H
字号:
#pragma once
#ifndef interface
#define interface class
#endif

#include <winsock2.h>
#include <ws2tcpip.h>

#pragma comment(lib,"ws2_32.lib")

#define DESTROY_OBJ( p ) \
	if( NULL != p ){	\
		delete p;		\
		p = NULL; }

#define THREAD_MAXNUM  4		//线程数目最大值
const int DATA_BUFSIZE	= 8192*2; 

typedef struct TagLPWSAOVERLAPPEDEX
{
	WSAOVERLAPPED	Overlapped; //重叠结构
	WSABUF			WSABuf;//socket数据缓冲
	char			Buffer[DATA_BUFSIZE];//wsaBuf指向的真实数据位置
	SOCKET			hSocket;//socket 句柄
	LPVOID			pTSS;
	TagLPWSAOVERLAPPEDEX *pPair;//指向相关socket的重叠扩展结构
}WSAOVERLAPPEDEX, *LPWSAOVERLAPPEDEX;//重叠扩展结构


interface ITcpSocketLower
{
	virtual int WINAPI SendData(char *pData,int len,int socketId) = 0;
};
interface ITcpSocketUpper
{
	virtual void WINAPI OnRecvData(char *pData,int len,sockaddr_in destaddr,int socketId) = 0;
	virtual void WINAPI OnClose(int socketId,sockaddr_in destaddr) = 0;
	virtual void WINAPI OnConnect(sockaddr_in destaddr,int socketId) = 0;
};
class CTcpSvrSocket:public ITcpSocketLower
{
public:
	CTcpSvrSocket(int nListenPort,ITcpSocketUpper *pTSU = NULL);
	~CTcpSvrSocket(void);
	//Lower Interface
	virtual int WINAPI SendData(char *pData,int len,int socketId);
	
	void Start();
	void Stop();
	enum{
		RUNNIG,
		STOP
	}STATE;
protected:
	ITcpSocketUpper *m_pTSU;
	int m_nListenPort;
	char m_Addr[17];
	HANDLE m_hThread;
	HANDLE m_hCompletionPort;
	int m_nThreadState;
	static DWORD WINAPI ServerWorkerThread(LPVOID CompletionPortID);
	static DWORD WINAPI MainThread(LPVOID pArgu);

	void SafeClose(LPWSAOVERLAPPEDEX lpOvlpEx);
};

class CTcpCltSocket:public ITcpSocketLower
{
public:
	CTcpCltSocket(int nListenPort,ITcpSocketUpper *pTSU = NULL);
	~CTcpCltSocket(void);
	//Lower Interface
	virtual int WINAPI SendData(char *pData,int len,int socketId);
	
	bool Start(const char * ip, unsigned short port );
	void Stop();
	enum{
		RUNNIG,
		STOP
	}STATE;
protected:
	ITcpSocketUpper *m_pTSU;
	int m_nListenPort;
	char m_Addr[17];
	HANDLE m_hThread;
	HANDLE m_hCompletionPort;
	int m_nThreadState;
	
	SOCKET m_socket;

	static DWORD WINAPI ServerWorkerThread(LPVOID CompletionPortID);

	void SafeClose(LPWSAOVERLAPPEDEX lpOvlpEx);
};

class CTcpSocketCtl:public ITcpSocketUpper
{
public:
	CTcpSocketCtl( CWnd *pWnd = NULL,int nListenPort = 0,const char *pAdd = NULL) {
		m_pWnd = pWnd;
		m_pTcpSvrSocket = new CTcpSvrSocket(nListenPort);
	};
	~CTcpSocketCtl() {
		DESTROY_OBJ( m_pTcpSvrSocket );
	};
	//Lower
	//virtual int WINAPI SendData(char *pData,int len,int socketId);
	//Upper
	virtual void WINAPI OnRecvData(char *pData,int len,sockaddr_in destaddr,int socketId);
	virtual void WINAPI OnClose(int socketId,sockaddr_in destaddr);
private:
	CTcpSvrSocket *m_pTcpSvrSocket;
	CTcpCltSocket *m_pTcpCltSocket;
	CWnd *m_pWnd;
};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -