转换地址格式

inet_ntop()
| const char *inet_ntop(int family, const void *addrptr, char *strptr, size_t len) |
| { |
| const u_char *p = (const u_char*)addrptr; |
| if (family == AF_INET) { |
| char temp[INET_ADDRSTRLEN]; |
| snprintf(temp, sizeof(temp), "%d.%d.%d.%d", p[0], p[1], p[2], p[3]); |
| if (strlen(temp) >= len) { |
| errno = ENOSPC; |
| rturn (NULL); |
| } |
| strcpy(strptr, temp); |
| return (strptr); |
| } |
| errno = EAFNOSUPPOPT; |
| return (NULL); |
| } |
| |
| |
inet_pton()
| int inet_pton(int family, const char *strptr, void *addrptr) |
| { |
| if (family == AF_INET) { |
| struct in_addr in_val; |
| if (inet_aton(strptr, &in_val)) { |
| memcpy(addrptr, &in_val, sizeof(in_val)); |
| return (1); |
| } |
| } |
| errno = EAFNOSUPPOPT; |
| return (-1); |
| } |
| |
| |
| |
| |
| |
| #include <sys/socket.h> |
| #include <netinet/in.h> |
| #include <arpa/inet.h> |
| #include <stdio.h> |
| |
| int main(void) |
| { |
| char *add; |
| struct sockaddr_in addr; |
| |
| addr.sin_addr.s_addr = inet_addr("192.168.1.1"); |
| add = inet_ntoa(addr.sin_addr); |
| printf("addr ip = %s.\n", add); |
| |
| return 0; |
| } |
inet_addr()
转换网络主机地址(点分十进制)为网络字节序二进制值,如果参数 char *cp 无效则返回-1(INADDR_NONE),但这个函数有个缺点:在处理地址为255.255.255.255时也返回-1,虽然它是一个有效地址,但inet_addr()无法处理这个地址。
in_addr_t inet_addr(const char *cp);
inet_ntoa()
net_ntoa()函数转换网络字节序地址->标准的点分十进制地址。该函数返回值指向保存点分十进制的字符串地址的指针,该字符串的空间为静态分配 的,所以在第二次调用这个函数时,意味着上一次调用并保存的结果将会被覆盖(重写)。
char *inet_ntoa(struct in_addr in);
主机字节序转网络字节序
| server_addr.sin_addr.s_addr = htonl(INADDR_ANY) |
| server_addr.sin_port = htons(PORT) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)