获取我的IP地址并使用c++将其转换为字节
Get my IP address and convert it into bytes using C++
获得IP地址然后使用c++将其转换为字节的最佳方法是什么?我需要一些跨平台的东西。我发现了很多,但我不知道什么是最好的技术。
您可以使用gethostname后跟gethostbyname来获取本地接口的内部IP。
你可以试试下面的代码:
struct IPv4
{
unsigned char b1, b2, b3, b4;
};
bool getMyIP(IPv4 & myIP)
{
char szBuffer[1024];
#ifdef WIN32
WSADATA wsaData;
WORD wVersionRequested = MAKEWORD(2, 0);
if(::WSAStartup(wVersionRequested, &wsaData) != 0)
return false;
#endif
if(gethostname(szBuffer, sizeof(szBuffer)) == SOCKET_ERROR)
{
#ifdef WIN32
WSACleanup();
#endif
return false;
}
struct hostent *host = gethostbyname(szBuffer);
if(host == NULL)
{
#ifdef WIN32
WSACleanup();
#endif
return false;
}
//Obtain the computer's IP
myIP.b1 = ((struct in_addr *)(host->h_addr))->S_un.S_un_b.s_b1;
myIP.b2 = ((struct in_addr *)(host->h_addr))->S_un.S_un_b.s_b2;
myIP.b3 = ((struct in_addr *)(host->h_addr))->S_un.S_un_b.s_b3;
myIP.b4 = ((struct in_addr *)(host->h_addr))->S_un.S_un_b.s_b4;
#ifdef WIN32
WSACleanup();
#endif
return true;
}
使用htonl, htons, ntohl, ntohs函数在网络和本地字节顺序之间进行转换。
在c++中没有这样做的标准方法,因为c++也运行在没有网络的系统上。
每个操作系统都有不同的方式来查询本地接口地址。你所能期望找到的最"可移植"的东西是一个库,它提供了与所有主要操作系统对应的底层实现的单一一致的接口。
正如Ben所说,您可以使用非标准的库,该库在许多操作系统上都有实现。boost绝不是灵丹妙药,但boost asio库确实是一个非常有用的、设计良好的、可移植的网络库,为许多操作系统提供了实现。特别是asio提供了ip::host_name方法
将IP转换为字符串的两种方法是inet_ntoa(仅限IPv4)或带有NI_NUMERICHOST标志的getnameinfo (IPv4和IPv6)
相关文章:
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 将字节数组转换为带有字节序问题的指针
- 使用 stbi_write_png,如何将 0 和 1 的矩形字节数组转换为单色 png 文件?
- 如何在连接器 C++ 中将原始字节转换为字符串
- 如何在C++(Arduino)中将浮点数组转换为字节数组
- 将字节数组转换为多维数组
- C++如何将字符数组转换为字节向量(向量<byte>)
- 如何在C++中将字节向量(std::vector<uint8_t>)转换为不同的uint32_t,uint16_t和uint8_t变量
- 将字符串转换为无符号字符数组/字节数组
- 将(N 个字节)无符号字符指针转换为浮点数和双 C++
- 将以 null 结尾的字节字符串转换为原始字符串文本
- 正在转换结构数据的字节序
- 如何将 CString 转换为字节 [] 数组?
- 一种将 Dart 中的字节数据转换为 C++ 中的无符号字符*的有效方法?
- 使用 ESP8266/8285 将字符串从 Web 服务器转换为字节数组
- 编译时将字符*转换为字节
- 将字节数组转换为对象C++ |C++中的 C# 位转换器
- C++转换字节
- 将整型转换字节中的字节更改为整数
- c++从字符串化字节转换字节数组