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