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

📄 rsthread.h

📁 一个网络接收和发送的程序
💻 H
字号:

// The following ifdef block is the standard way of creating macros which make exporting 
// from a DLL simpler. All files within this DLL are compiled with the RSTHREAD_EXPORTS
// symbol defined on the command line. this symbol should not be defined on any project
// that uses this DLL. This way any other project whose source files include this file see 
// RSTHREAD_API functions as being imported from a DLL, wheras this DLL sees symbols
// defined with this macro as being exported.
#ifdef RSTHREAD_EXPORTS
#define RSTHREAD_API __declspec(dllexport)
#else
#define RSTHREAD_API __declspec(dllimport)
#endif
#include "winsock2.h"

long g_nTotalConnections;
long g_nCurrentConnections;

typedef struct _SOCKET_OBJ         //定义套接字对象
{
	SOCKET s;                      //套接字句柄
	HANDLE event;                  //与此套接字相关联的事件对象句柄
	sockaddr_in addrRemote;        //客户端地址信息
	_SOCKET_OBJ *pNext;            //指向下一个对象,以连接成一个表
}SOCKET_OBJ,*PSOCKET_OBJ;

typedef struct _THREAD_OBJ
{
	HANDLE event[WSA_MAXIMUM_WAIT_EVENTS];    //定义线程对象
	int nSocketCount;                         //记录当前线程要等待的事件对象的句柄
	PSOCKET_OBJ pSockHeader;                  //指向当前线程处理的套接字对象列表的表头
	PSOCKET_OBJ pSockTail;                    //指向当前线程处理的套接字对象列表的表尾
	CRITICAL_SECTION cs;                      //关键代码段变量,同步对本结构的访问
	_THREAD_OBJ *pNext;                       //指向下一个对象,以连接成一个表
}THREAD_OBJ,*PTHREAD_OBJ;

CRITICAL_SECTION g_cs;
PTHREAD_OBJ g_pThreadList;

PSOCKET_OBJ GetSocketObj(SOCKET s);           //申请一个套接字对象并初始化
void FreeSocketObj(PSOCKET_OBJ pSocket);      //释放一个套接字对象
PTHREAD_OBJ GetThreadObj();                   //申请一个线程对象并初始化
void FreeThreadObj(PTHREAD_OBJ pThread);      //释放一个线程对象

BOOL InsertSocketObj(PTHREAD_OBJ pThread,PSOCKET_OBJ pSocket);      //向一个线程的套接字列表中插入一个套接字
void AssigToFreeThread(PSOCKET_OBJ pSocket);                        //将一个套接字安排给空闲的线程处理
void RebuildArray(PTHREAD_OBJ pThread);
void RemoveSocketObj(PTHREAD_OBJ pThread,PSOCKET_OBJ pSocket);      //从给定线程的套接字对象列表中移除一个套接字对象
DWORD WINAPI ServerThread(LPVOID lpParam);                          //处理线程
PSOCKET_OBJ FindSocketObj(PTHREAD_OBJ pThread,int nIndex);
BOOL HandleIO(PTHREAD_OBJ pThread,PSOCKET_OBJ pSocket);

extern "C" RSTHREAD_API DWORD StartSocket();

⌨️ 快捷键说明

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