www.pudn.com > 2003090514065121890.zip > spSocketServer.h
#ifndef __SVR_SOCKET_H_ #define __SVR_SOCKET_H_ #include#include "spBaseLock.h" #include "spServer.h" #include "spIPCComm.h" /* version 0.9 2001/09/19 by wenyy 定义用于SOCKET实现的服务器类 CSocketGlobalDataStorage 用于保存父线程所使用的监听SOCKET 和 其他一些信息 CSocketParentThread 为连接监听类 CSocketChildThread 为连接处理类 */ using namespace commIPC; namespace spBase { class CSocketChildThread; typedef void (*PSCHILDPROCESS) (CServerStatus* pSStatus,CSocketChildThread* pChildThread) ; //用于Socket的全局存储类 class CSocketGlobalDataStorage : public CGlobalDataStorage { public: CSocketGlobalDataStorage(LPCSTR pszServerName,PSCHILDPROCESS callbackFun,COutputDisplay *pDisplay); ~CSocketGlobalDataStorage(); public: //建立监听套接口 //pszIP 在本地的IP地址,如果为 NULL 表示本地的所有地址 //iPort 在本地的端口 //在当前套接口已经被打开或者服务未在停止状态时都会失败 BOOL OpenListenSocket(LPCSTR pszIP,int iPort); //关闭监听套接口 BOOL CloseListenSocket(void); //得到监听套接口 SOCKET GetListenSocket(void){return m_sockListen;}; //得到子线程处理回调函数 PSCHILDPROCESS GetCallbackFun(void){return m_pfunChildProcess;}; protected: SOCKET m_sockListen; PSCHILDPROCESS m_pfunChildProcess; }; //用于SOCKET连接的父线程类 class CSocketParentThread : public CParentThread { public: CSocketParentThread(CSocketGlobalDataStorage* pStore); ~CSocketParentThread(); public: virtual DWORD MainThread2(LPVOID pData); virtual DWORD StartWait(SOCKET sockListen); protected: CSocketGlobalDataStorage *m_pStore; int m_iIdentity; }; //用于SOCKET连接的子线程类 class CSocketChildThread : public CChildThread { public: CSocketChildThread(CSocketGlobalDataStorage* pStore,SOCKET sockComm,int iSerial,LPCSTR pszClientIP=NULL,int iClientPort=0); ~CSocketChildThread(); public: virtual DWORD MainThread2(LPVOID pData); virtual DWORD StartProcess(void); int GetChildSerial(void){return m_iSerial;}; public: CTCPSocket m_sockComm; int m_iSerial; //连接序号 CString m_szClientIP;//客户端IP int m_iClientPort;//客户端端口 CSocketGlobalDataStorage* m_pStore; }; /* class CSocketRichGlobalDataStorage : public CSocketGlobalDataStorage { }; class CSocketRichParentThread : public CSocketParentThread { }; */ }// end namespace #endif