我是靠谱客的博主 悲凉水壶,最近开发中收集的这篇文章主要介绍inet_ntoa 和inet_ntop函数,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在使用visual studio开发程序时,使用了inet_ntoa,编译时提示:

严重性    代码    说明    项目    文件    行    禁止显示状态
错误    C4996    'inet_ntoa': Use inet_ntop() or InetNtop() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings    iocpsys    C:UsersAdministratorsourcereposiocpsysiocpserver.cpp    19    
上网查阅了一下,inet_ntoa 和inet_ntop函数的区别和共同点:

共同点:两者功能都是将网络地址转换成“.”点隔的字符串格式。

不同点:1.参数数量不同,使用方法有小区别

               2.inet_ntoa只适用于ipv4地址,而inet_ntop适用ipv4和ipv6地址

               3.前者是旧函数,后者是新函数

inet_ntop函数说明:

PCSTR WSAAPI inet_ntop(
  [in]  INT        Family,
  [in]  const VOID *pAddr,
  [out] PSTR       pStringBuf,
  [in]  size_t     StringBufSize
);

这个函数是随IPv6出现的新函数,对于IPv4地址和IPv6地址都适用。函数名中的p和n非别代表表达(presentation)和数值(numeric)。地址的表达格式通常是ASCII字符串,数值格式则是存放到套接字地址结构中的二进制值。

这个函数的family参数既可以是AF_INET,也可以是AF_INET6。如果以不被支持的地址族作为family的参数,这个函数就会返回一个错误,并将errno置为EAFNOSUPPORT。通过WSAGetLastError可取得错误值。

该函数尝试转换由*pAddr指针所指的二进制值,并通过pStringBuf指针存放字符串结果。StringBufSize是pStringBuf缓冲区大小,以免该函数溢出其调用者的缓冲区。对于ipv4地址,这个缓冲区大小必须大于16个字符,对于ipv6地址,缓冲区必须大于46字符。

在正确转换的情况下,该函数的返回值是一个指向存放转换后字符串的指针。

        

inet_ntop用法:

引入相关头文件,windows下为:

#include <ws2tcpip.h>

linux下为:

#include<arpa/inet.h>

具体使用代码:

char buff[17];
::inet_ntop(AF_INET,(const void *)&addrRemote.sin_addr,buff,17);
//方法1
printf("转换后ip为:%s",buff);
//或者方法2
printf("转换后ip为:%s",::inet_ntop(AF_INET,(const void *)&addrRemote.sin_addr,buff,17));

inet_pton与 inet_ntop正好相反,将ip字符串转换为二进制值。

最后

以上就是悲凉水壶为你收集整理的inet_ntoa 和inet_ntop函数的全部内容,希望文章能够帮你解决inet_ntoa 和inet_ntop函数所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部