linux IP 地址转换
1.linux socket地址
2.linux IP 地址转换
3.linux TCP 通信流程 套接字函数 socket() bind() listen() accept() connect()4.linux TCP通信实现 服务器端 - 客户端5.linux TCP 三次握手6.linux TCP滑动窗口 四次挥手7.linux 多进程实现并发服务器 多线程并发8.linux TCP状态转换 半关闭 shutdown netstat 端口复用 setsockopt9.linux IO多路复用 select poll epoll10.linux 多路复用---poll11.linux 多路复用---epoll12.linux UDP 通信13.linux 本地套接字通信14.linux Web服务器以及HTTP协议15.linux 服务器编程基本框架和两种高效事件的处理模式16.linux 线程池 EPOLLONESHOT事件IP地址转换(字符串ip - 整数,主机字节序和网络字节序的转换):
通常,人们习惯用可读性好的字符串来表示 IP 地址,比如用 点分十进制 字符串表示 IPv4 地址,以及用 十六进制 字符串表示 IPv6 地址。
但编程中我们需要把它们转化为整数(二进制数)方能使用。而记录日志时则相反,我们要把整数表示的 IP 地址转化为 可读的字符串。
下面 3个 函数可用于用 点分十进制 字符串表示的 IPv4 地址和用网络字节序整数表示的 IPv4 地址之间的转换:
#include <arpa/inet.h> in_addr_t inet_addr(const char *cp); int inet_aton(const char *cp, struct in_addr *inp); char *inet_ntoa(struct in_addr in);
下面的这对更新的函数也能完成前面3个函数同样的功能, 并且它们同时适用 IPv4地址和 IPv6地址:常用
#include <arpa/inet.h>
//p:点分十进制的 IP 字符串, n:表示 network, 网络字节序的整数 int inet_pton(int af, const char *src, void *dst);
af:地址族:AF_INET AF_INET6
src:需要转换的点分十进制的 IP 字符串
dst:转换后的结果保存在这个里面
//将网络字节序的整数,转换成 点分十进制的 IP地址字符串 const char *inet_ntop(int af, const void *src, char *dst, socklen_t size);
af:地址族:AF_INET AF_INET6
src:要转换的 IP的整数的地址
dst:要转换成IP地址字符串保存的地方
size:第三个参数的大小(数组的大小)
返回值:返回转换后的数据的地址(字符串),和 dst 是一样的
案例:
1 #include <stdio.h> 2 #include <arpa/inet.h> 3 int main() 4 { 5 //创建一个 IP 字符串, 点分十进制的 IP地址 字符串 6 char buf[] = "192.168.1.4"; 7 unsigned int num = 0; 8 //将点分十进制 IP 字符串转换成 网络字节序的整数 9 inet_pton(AF_INET, buf, &num); 10 unsigned char * p = (unsigned char *)# 11 printf("%d %d %d %d\n", *p, *(p+1), *(p+2), *(p+3));//输出: 192 168 1 4 12 13 //将网络字节序的 IP 整数转换成 点分十进制的 IP字符串 14 char ip[16] = "";// 192(3) .(1) 168(3) .(1) 1(3) .(1) 4(3) 终止符(1) 15 const char * str = inet_ntop(AF_INET, &num, ip,16);//16 = sizeof(ip) 16 printf("%s\n", str);// 输出: 192.168.1.4 17 printf("ip: %s\n", str); 18 printf("%d\n", ip == str);//1 19 return 0; 20 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)