跨平台Socket封裝 對IPv4位址的封裝

2021-07-24 20:45:41 字數 2343 閱讀 2760

ipv4位址的封裝主要是對sockadr_in的封裝, 這是別人寫的乙個跨平台的**,覺得不錯,故記錄下來。如果您看到**,覺得還有改進的地方,可以說出來分享一下。

標頭檔案socketaddress.h

namespace linwin

//新增乙個非const版本的getaddress函式

inline

struct sockaddr_in* getaddress()

inline

void setaddress(const

struct sockaddr_in addr)

inline

unsigned

int addresslength() const

inline

int getfamily() const

inline

void setfamily(int fam)

virtual

unsigned

int gethost() const

inline

void sethost(unsigned

int addr)

inline

unsigned

short getport() const

inline

void setport(unsigned

short p)

virtual

int parse(const

std::string& addrstr);

virtual

int parse(const

std::string& addr, int port);

virtual

std::string tostring() const;

};}

實現檔案socketaddress.cpp

linwin::csocketaddress::csocketaddress(const

char *ip, unsigned

short port)

linwin::csocketaddress::csocketaddress(const

struct sockaddr_in& addr) : m_addr(addr)

{}linwin::csocketaddress::csocketaddress(const csocketaddress& addr) : m_addr(addr.m_addr)

{}linwin::csocketaddress::~csocketaddress()

{}linwin::csocketaddress& linwin::csocketaddress::operator=(const csocketaddress& addr)

return *this;

}std::string linwin::csocketaddress::tostring() const

int linwin::csocketaddress::parse(const

std::string& addrstr)

struct hostent *hostip = ::gethostbyname(tmp.c_str());

if (hostip == null)

return -1;

i = index + 1;

while (!isdigit(pdata[i]) && i < addrstr.length())

i++;

port = atoi(pdata + i);

memset(&m_addr, 0, sizeof(const

struct sockaddr_in));

m_addr.sin_family = af_inet;

memcpy((char*)&m_addr.sin_addr, hostip->h_addr, hostip->h_length);

m_addr.sin_port = htons(port);

return0;}

int linwin::csocketaddress::parse(const

std::string& addr, int port)

命名空間是我自己新增的,如果不需要可以去掉。整體的**是比較簡單的,就是類的基礎知識和socketaddr_in結構體的使用。類中留有兩個介面,乙個是解析像這樣」網域名稱 + 埠號」(如」www.baidu.com:80」)形式的介面;乙個是輸出」ip + 埠」(如」192.168.0.1:80」)這樣的形式的介面。想要修改這兩個介面,可以直接繼承,在子類中重寫這個介面。

新增乙個介面,是把「網域名稱」和「埠號」作為兩個引數傳入。

Delphi 跨平台 Socket 通訊庫

delphi 跨平台 socket 通訊庫 免費開源的delphi 跨平台 socket 通訊庫。原始碼url 重要更新 2017.08.22 重構,做了大量修改,詳見原始碼 增加了幾個新的 inte ce,用法詳見 demos icrosssocket icrosssslsocket icross...

嘗試封裝socket 對this指標的猜想

mysock.h 建立日期 2013年7月27日 ifndef mysock h define mysock h include struct mysock struct mysock newsock int domain,int type,int protocol int mybind const...

跨平台非阻塞SOCKET實現原始碼分析

1.實現linux與windows的共同函式 a.linux平台標頭檔案引用 include include include include include include include include include includeb.windows平台標頭檔案引用 include includ...