IP地址转换函数--inet_addr和inet_ntoa使用笔记

本文通过一个简单的C语言程序演示了如何使用inet_addr函数将点分十进制IP地址转换为长整型数值,并展示了如何利用inet_ntoa函数将其逆向转换回字符串形式。此外,还介绍了网络字节序与主机字节序之间的转换函数ntohl与htonl的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【inet_addr.c测试代码】

#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
int main(int aargc, char* argv[])
{
         struct in_addr addr1,addr2;
         ulong   l1,l2;
         l1= inet_addr("192.168.0.74");
         l2 = inet_addr("211.100.21.179");
         memcpy(&addr1, &l1, 4);
         memcpy(&addr2, &l2, 4);


         printf("%s : %s\n", inet_ntoa(addr1), inet_ntoa(addr2)); //注意这一句的运行结果


         printf("\"%s\" = inet_ntoa(0x%08x);\n", inet_ntoa(addr1),addr1);
         printf("\"%s\" = inet_ntoa(0x%08x);\n", inet_ntoa(addr2),addr2);
         
         printf("0x%08x == ntohl(0x%08x)\n",ntohl(l1),l1); 
         printf("0x%08x == ntohl(0x%08x)\n",ntohl(addr1.s_addr),l1); 
         printf("0x%08x == htonl(0x%08x)\n\n",htonl(addr2.s_addr),addr2.s_addr); 
         
         sockaddr_in socketaddr;
         memset(&socketaddr, 0, sizeof(sockaddr_in));
         socketaddr.sin_addr.s_addr = addr2.s_addr;
         socketaddr.sin_port = htons(12233);//端口
         printf("addr2 [ip: port] == [%s:%d]\n", inet_ntoa(socketaddr.sin_addr),ntohs(socketaddr.sin_port));
         return 0;
}

【Linux系统,CenOS6.4上,make编译,GCC4.8.2 运行结果】

[root@localhost ~]# cp inet_addr.c test.c -a
cp: overwrite `test.c'? y
[root@localhost ~]# make
g++ -c test.c
g++ -o test test.o
[root@localhost ~]# ./test 

192.168.0.74 : 192.168.0.74
"192.168.0.74" = inet_ntoa(0x4a00a8c0);
"211.100.21.179" = inet_ntoa(0xb31564d3);
0xc0a8004a == ntohl(0x4a00a8c0)
0xc0a8004a == ntohl(0x4a00a8c0)
0xd36415b3 == htonl(0xb31564d3)


addr2 [ip: port] == [211.100.21.179:51503]
[root@localhost ~]# 


[root@localhost ~]# 

【makefile 文件】

test:test.o
	g++ -o test test.o

test.o:test.c
	g++ -c test.c
          
clean:
	rm -f *.o test




使用方法: 免安装 只需要设置用户名即可 1 打开 user.reg 文件 将下行所示的 sdkd2006 改为你在 http://windy5157.mfa.cc 网站上注册的用户 "User"="sdkd2006" 2 保存修改后的 user.reg 文件 3 运行 ServiceRun.bat 文件 4 在 控制面板 -》 管理工具 -》 服务 中查看 InetIp服务状态,如为 已启动 则系统运行正常 功能介绍: InetIp周期性地将本机的Internet地址发布到http://windy5157.mfa.cc网站,用户可以通过访问http://windy5157.mfa.cc网站获取本机的Internet地址,方便没有开通静态IP业务及动态域名绑定的用户远程获取本机Internet地址。InetIp正常工作必需启动InetIp服务、在http://windy5157.mfa.cc网站注册用户账号并在本机设置注册的用户账号。 http://windy5157.mfa.cc网站提供服务的url如下: 1 查询本机Internet地址 http://windy5157.mfa.cc/InetIp/LocalInetIp.asp 2 查询本机在web发布的外网IP地址 http://windy5157.mfa.cc/InetIp/RemoteInetIp.asp?u=注册的用户账号 3 重定向至本机上运营的网站 http://windy5157.mfa.cc/InetIp/ReDirInetIp.asp?u=注册的用户账号 重定向的url需用户在http://windy5157.mfa.cc网站上设置,InetIp将用户web请求重定向至登记在http://windy5157.mfa.cc网站的Internet地址,重定向后的url示例如下:http://登记的Internet地址/设置的重定向url。 用户如通过路由器访问Internet,当需要经过Internet远程控制安装InetIp的电脑时,必需先在路由器上设置端口镜像,开放远程控制所需要的端口,如:微软mstsc远程控制客户端的3389端口。具体设置流程请参照http://windy5157.mfa.cc网站上的帮助文档。 InetIp由http://windy5157.mfa.cc网站站长陈宇开发,其版权归属于http://windy5157.mfa.cc网站站长陈宇本人。如在使用中遇到问题,请E-mail至windy5157@yahoo.com.cn或者QQ:545242448。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值