72 lines
2.4 KiB
C++
72 lines
2.4 KiB
C++
#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_
|