Initial commit
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
#ifndef SocketH
|
||||
#define SocketH
|
||||
|
||||
#define MAX_UDP_PACKET_SIZE 8192
|
||||
|
||||
#ifndef _WIN32
|
||||
#include <netinet/in.h>
|
||||
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_
|
||||
Reference in New Issue
Block a user