#ifndef SocketH #define SocketH #define MAX_UDP_PACKET_SIZE 8192 #ifndef _WIN32 #include typedef unsigned int SOCKET; typedef struct sockaddr SOCKADDR, *PSOCKADDR; #define INVALID_SOCKET (SOCKET)(~0) #define SOCKET_ERROR (-1) #define SOCKADDR_IN sockaddr_in #define IN_ADDR in_addr #define ioctlsocket ioctl #define closesocket close #endif class CSocket{ protected: SOCKET m_skt; bool m_bOpen; public: CSocket(); ~CSocket(); SOCKET GetSocket() {return m_skt;}; bool IsOpen(){return m_bOpen;}; virtual unsigned int ReadBlock(char *sBuf,unsigned int nLen)=0; virtual bool Listen(unsigned int nAllowConn)=0; virtual unsigned int Send(char *sBuf,unsigned int nLen)=0; virtual int Close(); bool GetLocalAddr(char *sAddr); bool SetOption(int option,const void * valuePtr,unsigned int valueSize); int SetNonblock( bool bNonblock ); virtual int WaitForReading(int nSeconds); }; class CUDPSocket:public CSocket{ public: CUDPSocket(); //随机端口初始化 CUDPSocket(unsigned short nPort,bool bRaw=false);//服务器端初始化 CUDPSocket(unsigned int ipAddr,unsigned short nPort,bool bRaw=false);//客户端初始化 CUDPSocket(char *sOtherName,unsigned short nPort,bool bRaw=false);//客户端初始化 virtual bool Listen(unsigned int nAllowConn); virtual unsigned int ReadBlock(char *sBuf,unsigned int nLen); virtual unsigned int ReadBlock(char *sBuf,unsigned int nLen, unsigned int &nIpAddr,unsigned short &nPort); unsigned int ReadFrom(char *sBuf, unsigned int nLen,unsigned int &nIpAddr,unsigned short &nPort); virtual unsigned int Send(char *sBuf,unsigned int nLen); virtual unsigned int SendTo(char *sBuf,unsigned int nLen, unsigned int nIpAddr,unsigned short nPort); virtual unsigned int Peek(char *sBuf, unsigned int nLen); protected: sockaddr_in ptop; unsigned int m_nPacketLen,m_nCur; }; class CTCPSocket:public CSocket{ public: CTCPSocket(); //随机端口初始化 CTCPSocket(unsigned short nPort);//服务器端初始化 CTCPSocket(char *sOtherName,unsigned short nPort);//客户端初始化 bool Connect(unsigned int ipAddr,unsigned short nPort); virtual bool Listen(unsigned int nAllowConn); bool Accept(CTCPSocket *pServerSkt); virtual unsigned int ReadBlock(char *sBuf,unsigned int nLen); virtual unsigned int Send(char *sBuf,unsigned int nLen); // virtual int Close(); void GetPeerAddr(char *sAddr); }; #endif //_SOCKET_H_