Files
2026-07-09 11:27:59 +08:00

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_