关于Socket编程中的inet_ntop、inet_pton和inet_ntoa、inet_addr
来源:互联网 发布:自己设计装修画图软件 编辑:程序博客网 时间:2024/06/08 06:11
VS2013中调试Socket代码时,遇到了点小问题:
问题代码为:
[cpp] view plain copy
- inet_ntoa(addrClient.sin_addr);
生成错误消息为:
[plain] view plain copy
- error C4996: 'inet_ntoa': Use inet_ntop() or InetNtop() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings
- 1> c:\program files (x86)\windows kits\8.1\include\um\winsock2.h(1868) : 参见“inet_ntoa”的声明
看到这条消息就有点懵了,之前在VS2010中好好的,怎么在这里就不行了。
然后试着:
1. 把SDL检查关闭,发现可以通过,但是error变成了warning。先说一下SDL关闭:在“项目”-“属性”-“配置属性”-“C/C++”-“常规”下,有一项“SDL检查”,把“是 (/sdl)”改为“否(/sdl-)”就可以了。
2. 加上语句: #pragma comment(lib, "ws2_32.lib")
SDL安全检查在VS2010中是没有的,从VS2012开始就有了。inet_pton和inet_ntop这2个IP地址转换函数,能够处理ipv4和ipv6,算是比较新的函数了,可以在将IP地址在“点分十进制”和“二进制整数”之间转换。SDL提示错误可能是推荐使用相对安全的函数吧。那么,关闭了SDL确实可以了,但warning还在啊,所以找个更好的办法。
首先根据提示看看“inet_ntoa”的声明,在头文件WinSock2.h中:
[cpp] view plain copy
- char FAR *
- WSAAPI
- inet_ntoa(
- _In_ struct in_addr in
- );
Inet_ntoa的参数是一个in_addr的结构体。这个结构体将一个点分十进制格式的IP地址转换为u_long类型,保存在S_addr中。
再看看inet_ntop的定义,在文件WS2tcpip.h中:
[cpp] view plain copy
- PCSTR
- WSAAPI
- inet_ntop(
- _In_ INT Family,
- _In_ PVOID pAddr,
- _Out_writes_(StringBufSize) PSTR pStringBuf,
- _In_ size_t StringBufSize
- );
那么,修改后的代码为:
[cpp] view plain copy
- // char sendBuf[100];
- // SOCKADDR_IN addrClient;
- inet_ntop(AF_INET, (void*)&addrClient.sin_addr, sendBuf, 16);
inet_pton功能与inet_ntop正好相反,将“点分十进制” 转换为 “二进制整数”。
[cpp] view plain copy
- INT
- WSAAPI
- inet_pton(
- _In_ INT Family,
- _In_ PCSTR pszAddrString,
- _Out_writes_bytes_(sizeof(IN6_ADDR)) PVOID pAddrBuf
- );
阅读全文
0 0
- 关于Socket编程中的inet_ntop、inet_pton和inet_ntoa、inet_addr
- 关于Socket编程中的inet_ntop、inet_pton和inet_ntoa、inet_addr
- inet_addr() inet_ntoa() inet_pton inet_ntop sockaddr_in
- 关于Linux的inet_addr inet_aton inet_ntoa 函数 和inet_pton inet_ntop函数
- 网络字节转换inet_aton & inet_ntoa & inet_addr和inet_pton & inet_ntop
- 网络字节转换inet_aton & inet_ntoa & inet_addr和inet_pton & inet_ntop
- 网络字节转换inet_aton & inet_ntoa & inet_addr和inet_pton & inet_ntop
- 网络字节转换inet_aton & inet_ntoa & inet_addr和inet_pton & inet_ntop
- 网络字节转换inet_aton & inet_ntoa & inet_addr和inet_pton & inet_ntop
- 网络字节转换inet_aton & inet_ntoa & inet_addr和inet_pton & inet_ntop
- 网络字节转换inet_aton & inet_ntoa & inet_addr和inet_pton & inet_ntop
- 网络字节转换inet_aton & inet_ntoa & inet_addr和inet_pton & inet_ntop
- 地址转换函数inet_aton、 inet_ntoa、 inet_addr和inet_pton 、inet_ntop
- 网络字节转换inet_aton & inet_ntoa & inet_addr和inet_pton & inet_ntop
- VS inet_ntoa,inet_addr不能使用,inet_ntop,inet_pton
- 网络编程:inet_ntoa inet_aton inet_ntop和inet_pton分不清楚
- 网络字节转换inet_aton & inet_ntoa & inet_addr和inet_pton & inet_ntop
- inet_addr, inet_aton, inet_ntoa, inet_pton, inet_ntop函数简析
- LeetCode 260. Single Number III Python Solution
- pip install MySQL-python 报 "EnvironmentError: mysql_config not found"
- iOS下JS与OC互相调用
- postgresql修改表
- 新建Android项目
- 关于Socket编程中的inet_ntop、inet_pton和inet_ntoa、inet_addr
- 新一代开源Android渠道包生成工具Walle
- CentOS下安装JDK、NEXUS、TOMCAT、RABBITMQ集群
- 朴素贝叶斯方法进行文本分类
- 使用redis,放入对象时,反序列化的问题
- Unauthorized request to start container.
- 多线程和多进程的区别
- iOS持续更新常用命令行
- 图像锐化