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

📄 tcpsocketserver.h

📁 视频监控vc源代码.对于做视频系统的朋友们很有帮助
💻 H
字号:
#ifndef _TCPSOCKETSERVER_H_
#define _TCPSOCKETSERVER_H_

#include <winsock2.h>
#include <hash_map>
#include <iostream>
#include <process.h>
#include "sync.h"
#include "Socket.h"

using namespace std;
using namespace stdext;

#define WIOCP_ENDWAIT 20000

typedef enum {
	RECV_POSTED,
	SEND_POSTED,
	STOP_POSTED
} IO_OPERATION_TYPE;

struct PER_IO_OPERATION_DATA:OVERLAPPED{
	WSABUF DataBuf;
	char Buffer[MAX_UDP_PACKAGE_SIZE+8];
	IO_OPERATION_TYPE OperationType;
};

struct PER_SOCKET_DATA{
	SOCKET socket;
	volatile long io_count;
};

class TCPSocketServer
{
public:
	TCPSocketServer(void);
	~TCPSocketServer(void);
	bool init();
	bool start(unsigned short usPort,unsigned long ulIP);
private:
	bool StartThread();
	static unsigned int __stdcall ThreadProc(void* lpParam);
	void ClearSocket(SOCKET s, DWORD dwParam);
	void ThreadCleanUp();
	bool Stop();
private:
	list<PER_SOCKET_DATA*> m_socks;//这是一个冗余的类,用于删除第一个元素,把没用的socket接到最后
	HANDLE     m_hIOCP;//io completion port handle
    ULONG      m_NumThreads;// number of threads currently created
    ULONG      m_ConcurrentThreads;// number of threads to run simultaniously
    ULONG      m_RunningThreads;// number of threads running, doing something useful
    ULONG      m_MaxThreads;// maximum number of threads allowed to be in the iocp
	hash_map<DWORD, DWORD> m_ThreadMap;
	CriticalSection  m_ThreadMapLock;
//	CriticalSection m_ClearSocketLock;
	SOCKET m_FirstSocket;
	HANDLE     m_hStopEvent;
protected:
	bool stop;
public:
	int Send(char* pData, size_t nLen, SOCKET s, DWORD dwParam = 0);
	int Connect(unsigned short usPort,unsigned long ulIP,SOCKET& addr_a,DWORD& addr_b);
	virtual int OnReceive(char* pData, size_t nLen, SOCKET s,DWORD dwParam) = 0;
//	virtual int OnConnect(SOCKET s,DWORD dwParam) = 0;
	virtual int OnClosed(SOCKET s,DWORD dwParam) = 0;
	virtual int OnAccepted(SOCKET s,DWORD dwParam) = 0;
	virtual int OnSend(SOCKET s,DWORD dwParam) = 0;
	void SetStop(){closesocket(m_FirstSocket);stop = false;};
};

#endif

⌨️ 快捷键说明

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