当前位置: 首页 > wzjs >正文

手机网站开发者工具wap手机网站建设

手机网站开发者工具,wap手机网站建设,烟台网站建设哪家便宜,花生壳怎么发布自己做的网站IP地址结构体与字符串转换函数详解 在Linux C网络编程中,IP地址的二进制结构体(如struct in_addr)与字符串形式(如"192.168.1.1")之间的转换经常涉及到,与IP地址格式相关的函数包括inet_aton、i…

IP地址结构体与字符串转换函数详解

在Linux C网络编程中,IP地址的二进制结构体(如struct in_addr)与字符串形式(如"192.168.1.1")之间的转换经常涉及到,与IP地址格式相关的函数包括inet_atoninet_addrinet_ntoainet_ptoninet_ntopgetaddrinfogetnameinfo等。

1. inet_aton函数(已过时)

仅支持IPv4,不推荐在新代码中使用
inet_aton是Linux系统中的一个函数,用于将点分十进制格式的IPv4地址转换为网络字节序的二进制形式。

  • 头文件#include <arpa/inet.h>
  • 函数原型int inet_aton(const char *cp, struct in_addr *inp);
  • 参数
  • cp:指向点分十进制格式的IPv4地址字符串的指针。
  • inp:指向struct in_addr的指针,用于存储转换后的二进制地址。
  • 返回值:如果转换成功,返回非零值;如果转换失败(例如,提供的字符串不是有效的IPv4地址),返回零。

2. inet_addr函数

inet_addr函数将一个点分十进制的IP转换成一个网络字节序整数

  • 头文件#include <arpa/inet.h>
  • 函数原型in_addr_t inet_addr(const char* strptr);
  • 参数strptr是指向点分十进制IP地址字符串的指针。
  • 返回值:若字符串有效,则将其转换为32位二进制网络字节序的IPv4地址,否则返回INADDR_NONE
  • 缺点:无法处理255.255.255.255(返回INADDR_NONE)

3. inet_ntoa函数

inet_ntoa函数用于将网络字节序的IPv4地址转换成点分十进制字符串表示。

  • 头文件#include <arpa/inet.h>
  • 函数原型char* inet_ntoa(struct in_addr in);
  • 参数in是一个in_addr结构体,其中包含要转换的网络字节序IPv4地址。
  • 返回值:返回一个指向静态分配的字符串的指针,该字符串包含点分十进制的IP地址。由于返回的是指向静态数据的指针,因此该函数不可重入,且每次调用都会覆盖之前的结果。

4. inet_pton和inet_ntop函数

inet_ptoninet_ntop这两个函数能够处理IPv4和IPv6地址的转换。

  • 头文件
  • Linux下:#include <arpa/inet.h>
  • 函数原型
  • inet_ptonint inet_pton(int af, const char *src, void *dst);
  • inet_ntopconst char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt);
  • 参数
  • af:地址族,常用的是AF_INET(IPv4)和AF_INET6(IPv6)。
  • src:输入的字符串表示的IP地址(inet_pton)或输入的二进制表示的IP地址(inet_ntop)。
  • dst:输出的二进制表示的IP地址(inet_pton)或输出的字符串表示的IP地址的缓冲区(inet_ntop)。
  • cntinet_ntop中缓冲区的大小,避免溢出,(推荐INET_ADDRSTRLEN或INET6_ADDRSTRLEN)。
  • 返回值
  • inet_pton:成功返回1,参数无效返回0,错误返回-1。
  • inet_ntop:成功返回字符串的首地址,错误返回NULL。

5. getaddrinfo函数

getaddrinfo函数用于域名解析,将主机名和服务名映射到套接字地址结构。

  • 头文件#include <netdb.h>
  • 函数原型:int getaddrinfo(const char *node, const char *service,const struct addrinfo *hints,struct addrinfo **res);
  • 参数:
  • node: 主机名或IP地址字符串。
  • service: 服务名或端口号(如"http"或"80")。
  • hints: 过滤结果的提示结构。
  • res: 输出参数,返回地址链表。
  • 返回值:成功返回0,错误返回错误代码(需用gai_strerror解析)。
  • 特点:需用freeaddrinfo释放内存

6. getnameinfo函数

getnameinfo函数用于将互联网协议地址(IPv4或IPv6)及其端口号转换为人类可读的主机名和服务名称。

  • 头文件#include <netdb.h>
  • 函数原型int getnameinfo(const struct sockaddr *sa, socklen_t salen, char *host, size_t hostlen, char *serv, size_t servlen, int flags);
  • 参数
  • sa: 输入的套接字地址结构。
  • host: 输出主机名缓冲区。
  • serv: 输出服务名缓冲区。
  • flags: 控制标志(如NI_NUMERICHOST强制返回数字地址)
  • 返回值:如果成功,返回0;如果出错,返回一个错误代码。

比较

函数支持IPv6线程安全功能范围推荐场景
inet_atonIPv4字符串→结构体旧代码维护
inet_ntoaIPv4结构体→字符串避免使用
inet_pton字符串→二进制结构体新代码,需IPv6支持
inet_ntop二进制结构体→字符串新代码,需IPv6支持
getaddrinfo主机名→地址结构体链表需要DNS解析或多协议支持
getnameinfo地址结构体→主机名/服务反向解析或获取服务名

示例

使用inet_pton和inet_ntop

#include <stdio.h>
#include <arpa/inet.h>int main() {// IPv4转换示例struct in_addr ipv4_addr;inet_pton(AF_INET, "192.168.1.1", &ipv4_addr);char ipv4_str[INET_ADDRSTRLEN];inet_ntop(AF_INET, &ipv4_addr, ipv4_str, INET_ADDRSTRLEN);printf("IPv4: %s\n", ipv4_str);// IPv6转换示例struct in6_addr ipv6_addr;inet_pton(AF_INET6, "2001:db8::1", &ipv6_addr);char ipv6_str[INET6_ADDRSTRLEN];inet_ntop(AF_INET6, &ipv6_addr, ipv6_str, INET6_ADDRSTRLEN);printf("IPv6: %s\n", ipv6_str);return 0;
}

使用getaddrinfo

#include <stdio.h>
#include <netdb.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>int main() {struct addrinfo hints, *res, *p;memset(&hints, 0, sizeof hints);hints.ai_family = AF_UNSPEC; // 支持IPv4/IPv6hints.ai_socktype = SOCK_STREAM;int status = getaddrinfo("example.com", "http", &hints, &res);if (status != 0) {fprintf(stderr, "getaddrinfo error: %s\n", gai_strerror(status));return 1;}// 遍历地址链表for (p = res; p != NULL; p = p->ai_next) {void *addr;char ipstr[INET6_ADDRSTRLEN];if (p->ai_family == AF_INET) { // IPv4struct sockaddr_in *ipv4 = (struct sockaddr_in *)p->ai_addr;addr = &(ipv4->sin_addr);} else { // IPv6struct sockaddr_in6 *ipv6 = (struct sockaddr_in6 *)p->ai_addr;addr = &(ipv6->sin6_addr);}inet_ntop(p->ai_family, addr, ipstr, sizeof ipstr);printf("IP: %s\n", ipstr);}freeaddrinfo(res); // 必须释放内存return 0;
}

文章转载自:

http://mXk3GEel.gfdpk.cn
http://jGFinRX3.gfdpk.cn
http://gepCFK6U.gfdpk.cn
http://26TrdgCU.gfdpk.cn
http://CzVCbWYZ.gfdpk.cn
http://aBrRQdM9.gfdpk.cn
http://iHV1Es5f.gfdpk.cn
http://eDcoNEHi.gfdpk.cn
http://GQJnpVHr.gfdpk.cn
http://vC4zk9ce.gfdpk.cn
http://XclSK5UJ.gfdpk.cn
http://5cVRDqeH.gfdpk.cn
http://9J8c1H6z.gfdpk.cn
http://IExpc3fr.gfdpk.cn
http://KQDLwLRy.gfdpk.cn
http://gZuCl4zF.gfdpk.cn
http://tWpKW6b6.gfdpk.cn
http://yG82qA5Q.gfdpk.cn
http://7SjZ8fBj.gfdpk.cn
http://VLifcpks.gfdpk.cn
http://xE9CogUS.gfdpk.cn
http://LIKeVqmS.gfdpk.cn
http://hVzp3svz.gfdpk.cn
http://2JNQvvhG.gfdpk.cn
http://N3VZc0pc.gfdpk.cn
http://2ysoX4Pv.gfdpk.cn
http://u6z0WhqB.gfdpk.cn
http://JV5tB0FS.gfdpk.cn
http://EeUTuqmU.gfdpk.cn
http://2VCCBhG3.gfdpk.cn
http://www.dtcms.com/wzjs/678555.html

相关文章:

  • 做网站百度百科域名更换通知大牛鲁
  • 建行官网网站简单的网站设计案例
  • 湘潭大学迎新自助网站全球招商网
  • 哪家做网站好 成都龙岗seo优化
  • 天天seo站长工具新浪云上传wordpress
  • 专业的网站建设找聚爱开发网站的步骤
  • 企业建网站tiktok跨境电商怎么做
  • 那个网站可以找人做兼职兰溪城市建设规划网站
  • 保定网站公司那家好计算机专业网页毕业设计
  • 网站托管就业购物网站设计方案
  • 汉中微信网站建设服务网页设计网站建设的书籍
  • 黑龙省建设厅网站首页素锦wordpress主题修改
  • 成都航空公司官方网站谷歌浏览器网页
  • 海东商城网站建设windows优化大师会员
  • 服务器网站备案快速搭建网站 优帮云
  • 怎么给网站做spm网页制作东莞
  • 济南企业建站公司重庆工程公司有哪些
  • 网站免费建设怎样在网做旅游网站
  • 琼中网站建设wordpress调用子分类
  • 中细软网站建设跨境电商产品开发
  • 网站备案是 备案空间吗自己做网站别人怎么看见
  • dremrever怎么做网站怎么在wordpress免费注册博客网站
  • 吉林市做网站的公司网站上文章分享的代码怎么做的
  • 惠城网站建设有哪些企业网站建设的一般要素主要包括网站的
  • 怎样自学做网站国内开源网站
  • asp个人网站下载网站开发项目实训总结
  • 服务器搭建网站能ping t公民道德建设网站
  • 诗人做的网站温州系统开发
  • 道滘镇做网站百度北京公司地址全部
  • ic电子网站建设招聘页面设计