#pragma once
#include<arpa/inet.h>
#include<netinet/in.h>
#include<string>
class InetAddress
{
public:
explicit InetAddress(uint16_t port=0,std::string ip = "127.0.0.1");
explicit InetAddress(const sockaddr_in &addr):addr_(addr){};
std::string toIp() const;
std::string toIpPort() const;
uint16_t toPort() const;
const sockaddr_in*getSockAddr () const {return &addr_;}
void setSockAddr(const sockaddr_in addr){ addr_=addr; }
private:
sockaddr_in addr_;
};
#include"InetAddress.h"
#include<string.h>
#include<strings.h>
InetAddress::InetAddress(uint16_t port,std::string ip )
{
bzero(&addr_,sizeof addr_);
addr_.sin_family=AF_INET;
addr_.sin_port=htons(port);
addr_.sin_addr.s_addr=inet_addr(ip.c_str());
}
std::string InetAddress::toIp()const
{
char buf[64]={0};
::inet_ntop(AF_INET,&addr_.sin_addr,buf,sizeof buf);
return buf;
}
std::string InetAddress::toIpPort() const
{
char buf[64]={0};
::inet_ntop(AF_INET,&addr_.sin_addr,buf,sizeof buf);
size_t end=strlen(buf);
uint16_t port=ntohs(addr_.sin_port);
sprintf(buf+end,": %u",port);
return buf;
}
uint16_t InetAddress::toPort()const
{
return (ntohs(addr_.sin_port));
}