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...