IPBS_Station/SDK/include/CCSocket.h
2025-09-05 08:44:30 +08:00

209 lines
4.2 KiB
C++

#define __CCSocket__
#include <CCString.h>
#include <vector>
#ifdef __CCSocket__
#pragma once
#include "CC.h"
#include "string"
struct CCHostInfo
{
std::string IPAddress;
unsigned short Port;
};
enum CCOpt
{
BROADCAST,
};
#ifdef _WIN32
#include <winsock2.h>
#include <ws2tcpip.h>
#include <mswsock.h>
#pragma warning(disable : 4996)
#pragma comment(lib,"ws2_32.lib")
typedef long long ByteHander;
#define HanderSize sizeof(ByteHander)
class WinWSADWAInitAndClean
{
public:
WSADATA wsd{};
WinWSADWAInitAndClean(){
if (WSAStartup(MAKEWORD(2, 2), &this->wsd)!=0){
WSACleanup();
}
}
~WinWSADWAInitAndClean(){
WSACleanup();
}
};
inline WinWSADWAInitAndClean winsc;
// if (WSAStartup(MAKEWORD(2, 2), &this->wsd)!=0)
// {
// WSACleanup();
// return sc;
// }
enum IPVX
{
IPV4 = AF_INET,
IPV6 = AF_INET6
};
enum TORU
{
TCP = IPPROTO_TCP,
UDP = IPPROTO_UDP
};
enum TYPE
{
STREAM = SOCK_STREAM,
DGRAM = SOCK_DGRAM
};
class CCSocket
{
public:
SOCKET Socketbit = -1;
public:
CCSocket() = default;
CCSocket Socket(IPVX IPV4orIPV6, TORU TCPorUDP, TYPE Type = TYPE::STREAM);
bool SetSockOpt(CCOpt opt);
void SetSocketNonBlocking();
bool isDataAvailable();
static std::vector<CCString> GetLocalIP(IPVX ipvx = IPVX::IPV4,int Number = 1);
CCHostInfo GetClientHost();
CCHostInfo GetLocalHost();
bool Connect(const char* IP, unsigned short Port);
bool Bind(const char* IP,unsigned short Port);
bool Listen(unsigned short UserNum = 10);
CCSocket Accept();
bool Send(const char* str);
bool Send(const void *__buf, size_t __n, int __flags);
bool SendData(const char * str,sockaddr_in addr_in);
bool SendByte(const char* str,int len);
bool UDPSend(const char* str,const char* IP,int Port);
bool UDPSendByte(const char* str, ByteHander len, const char* IP, int Port);
ByteHander RecvData(char* buffer,ByteHander lens);
ByteHander UDPRecvData(char* buffer,ByteHander lens,CCHostInfo* info);
void Close();
bool GetDateHead(char* data, ByteHander* size);
bool GetStrHead(char* data,ByteHander size);
bool operator == (CCSocket socket);
bool operator != (CCSocket socket);
bool isConnectionAlive();
private:
sockaddr_in client = {}, server = {};
int IPVx = 0;
int sock = -1;
bool Stop = false;
};
#elif __linux__
#include <sys/socket.h>
#include <netinet/in.h>
#include <linux/if.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <fcntl.h>
#include <ifaddrs.h>
#include <netdb.h>
#include <sys/poll.h>
typedef int SOCKET;
typedef long long ByteHander;
#define HanderSize sizeof(ByteHander)
enum IPVX
{
IPV4 = AF_INET,
IPV6 = AF_INET6
};
enum TORU
{
TCP = IPPROTO_TCP,
UDP = IPPROTO_UDP
};
enum TYPE
{
STREAM = SOCK_STREAM,
DGRAM = SOCK_DGRAM
};
class CCSocket
{
public:
SOCKET Socketbit = -1;
public:
CCSocket() = default;
CCSocket Socket(IPVX IPV4orIPV6, TORU TCPorUDP, TYPE Type = TYPE::STREAM);
bool SetSockOpt(CCOpt opt);
void SetSocketNonBlocking();
bool isDataAvailable();
static std::vector<CCString> GetLocalIP(IPVX ipvx = IPVX::IPV4,int Number = 1);
CCHostInfo GetClientHost();
CCHostInfo GetLocalHost();
bool Connect(const char* IP, unsigned short Port);
bool Bind(const char* IP,int Port);
bool Listen(unsigned short UserNum = 10);
CCSocket Accept();
bool Send(const char* str);
bool Send(const void *__buf, size_t __n, int __flags);
bool SendData(const char * str,sockaddr_in addr_in);
bool SendByte(const char* str,int len);
bool UDPSend(const char* str,const char* IP,int Port);
bool UDPSendByte(const char* str, ByteHander len, const char* IP, int Port);
ByteHander RecvData(char* buffer,ByteHander lens);
ByteHander UDPRecvData(char* buffer,ByteHander lens,CCHostInfo* info);
bool GetDateHead(char* data, ByteHander* size);
bool GetStrHead(char* data,ByteHander size);
void Close();
//----------------------------------------------------------------------------------------
bool operator == (CCSocket socket);
bool operator != (CCSocket socket);
bool isConnectionAlive();
private:
sockaddr_in client = {},server = {};
int IPVx = 0;
int opt = 1;
bool Stop = false;
};
#else
#endif
#endif