net/InetAddress.h
#ifndef _INET_ADDRESS_H_ #define _INET_ADDRESS_H_ #include <arpa/inet.h> #include <netinet/in.h> #include <sys/socket.h> #include <string> class Ipv4Address { public: Ipv4Address(); Ipv4Address(std::string ip, uint16_t port); void SetAddr(std::string ip, uint16_t port); std::string GetIp(); uint16_t GetPort(); struct sockaddr* GetAddr(); private: std::string ip_; uint16_t port_; struct sockaddr_in socket_addr_; };
#include "net/InetAddress.h" Ipv4Address::Ipv4Address() {} Ipv4Address::Ipv4Address(std::string ip, uint16_t port) : ip_(ip), port_(port) { socket_addr_.sin_family = AF_INET; socket_addr_.sin_addr.s_addr = inet_addr(ip.c_str()); socket_addr_.sin_port = htons(port); } void Ipv4Address::SetAddr(std::string ip, uint16_t port) { ip_ = ip; port_ = port; socket_addr_.sin_family = AF_INET; socket_addr_.sin_addr.s_addr = inet_addr(ip.c_str()); socket_addr_.sin_port = htons(port); } std::string Ipv4Address::GetIp() { return ip_; } uint16_t Ipv4Address::GetPort() { return port_; } struct sockaddr* Ipv4Address::GetAddr() { return (struct sockaddr*)&socket_addr_; }
测试代码:
#include "net/InetAddress.h" #include <iostream> int main() { Ipv4Address address("192.168.1.1",4096); std::cout << "ip = " << address.GetIp() << ",potr = " << address.GetPort() << std::endl; Ipv4Address address1; address1.SetAddr("192.168.1.1",4096); std::cout << "ip = " << address1.GetIp() << ",potr = " << address.GetPort() << std::endl; }