社区
网络编程
帖子详情
htonl/htons与inet_addr的区别
shaowenhua86
2009-11-12 09:25:40
htonl/htons与inet_addr的区别,在设地址时例如:local.sin_addr.s_addr = htonl(ServerIP);/server.sin_addr.S_un.S_addr = inet_addr(ServerIP);
有什么区别?
...全文
1119
4
打赏
收藏
htonl/htons与inet_addr的区别
htonl/htons与inet_addr的区别,在设地址时例如:local.sin_addr.s_addr = htonl(ServerIP);/server.sin_addr.S_un.S_addr = inet_addr(ServerIP); 有什么区别?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
today513
2011-04-20
打赏
举报
回复
也就是说
inet_addr("255.255.255.255")
与
htonl(0xffffffff)
是等价的
wchnjstar
2009-11-13
打赏
举报
回复
都可以啊,但inet_addr的参数是字符串,返回值是网络字节序,htonl的参数是32bit的ip,并且是主机字节序
Conry
2009-11-12
打赏
举报
回复
inet_addr(ServerIP); 是把字符串形式的ip转化为整数,转化后就是网络字节序
htonl(ServerIP);就是整数的ip转化为网络字节序
第二种一般用的比较少,
chehw
2009-11-12
打赏
举报
回复
在网络传输中network byte order采用big-endian序,对于0x0A0B0C0D,传输顺序就是0A 0B 0C 0D;
而host byte order与CPU架构有关,
intel x86架构CPU为little-endian, host byte order为0D 0C 0B 0A;
Motorlola/PowerPC/SPARC等CPU为big-endian.
因为无法确定相互通讯的两台PC是否拥有相同的CPU架构,因而用htonl/htons来统一网络编程中字(WORD)或双字(DWORD)的字节传输顺序,确保两端均可按正确的方式来进行处理
WinSocket 常用函数及结构
常用结构定义及函数 WSADATA sock
add
r_in fd_set timeval WSAStartup WSACleanup
htons
htonl
ntohs ntohl
inet
_
add
r
inet
_ntoa socket closesocket bind listen connect accept select send recv send 、sendto 、recv 、recvfrom函数在不同模式下的不同表现
UDP.rar_IPPROTO_UDP_UDP监听_WSAStartup_sock_DGRAM
1、首先需要定义的对象: SOCKET ReceivingSocket //接收端的Socket SOCK
ADD
R_IN Receiver
Add
r //接收端的地址信息 char ReceiveBuf[1024] //接收数据缓冲区大小 int BufLength //缓冲区长度 SOCK
ADD
R_IN Sender
Add
r //发送数据端地址信息 int Sender
Add
rSize = sizeof(Sender
Add
r) //发送端地址信息的长度 2、启动WSA动态库: WSAStartup(MAKEWORD(2,2),&wsd) 3、创建socket: ReceivingSocket=socket(AF_
INET
,SOCK_DGRAM,IPPROTO_UDP) 4、初始化服务器地址及监听端口 Receiver
Add
r.sin_family=AF_
INET
//家族 Receiver
Add
r.sin_port=
htons
(9000) //设置端口号 Receiver
Add
r.sin_
add
r.s_
add
r=
htonl
(IN
ADD
R_ANY) //地址 5、绑定端口 6、接收数据: ReceivingSocket,//接收端Socket ReceiveBuf,//接收端用来存储数据的缓冲区 BufLength,//缓冲区的大小 0,//接收的附加选项,设置为0即可 (SOCK
ADD
R*)&Sender
Add
r,//发送端的Socket地址 &Sender
Add
rSize//发送端Socket地址的大小 ) 7、关闭socket,关闭WSA
c编写的RIP协议源程序
用C写的rip协议 这是其中的广播request程序片段: void RouteInit() { int i,optval=0,length,error; routeNum = 0; // init local socket
add
ress and ip
add
ress GetLocalIP(); // init route table items for(i = 0; i < MAX_NUM; i++) { SetRouteEntry(&routeTable[i].routeInfo,"0.0.0.0",0,0); routeTable[i].isvalid = 0; routeTable[i].timer = 0; routeTable[i].statue = 0;
inet
_aton("0,0,0,0",&routeTable[i].sourceIP
Add
r); } // init request packet SetRoutePacket(&reqPacket,REQUEST); SetRouteEntry(&reqPacket.routeEntry[0],"0.0.0.0",0,16); // init response packet SetRoutePacket(&resPacket,RESPONSE); recvSock
Add
r.sin_family = AF_
INET
; recvSock
Add
r.sin_port =
htons
(PORT); recvSock
Add
r.sin_
add
r.s_
add
r =
htonl
(IN
ADD
R_ANY); sendSock
Add
r.sin_family = AF_
INET
; sendSock
Add
r.sin_port =
htons
(PORT); //
inet
_aton("240.255.255.255",&sendSock
Add
r.sin_
add
r); sendSock
Add
r.sin_
add
r.s_
add
r =
htonl
(IN
ADD
R_ANY); EntryInit(); sock = socket(AF_
INET
,SOCK_DGRAM,0); if(sock<0) { printf("cannot create a socket!\n"); exit(1); } if(setsockopt(sock,SOL_SOCKET,SO_BROADCAST,&optval,sizeof(int)) != 0) { printf("cannot broadcast!\n"); close(sock); exit(1); } if(bind(sock,(struct sock
add
r*)&recvSock
Add
r,sizeof(recvSock
Add
r))<0) { printf("cannot bind to port\n"); close(sock); exit(1); } length=sizeof recvSock
Add
r; getsockname(sock,(struct sock
add
r*)&recvSock
Add
r,&length); printf("Port %d is opened. Listen for packet...\n",ntohs(recvSock
Add
r.sin_port)); FD_ZERO(&fdSet); FD_SET(sock,&fdSet); error = sendto(sock,&reqPacket,4+sizeof(struct ROUTE_ENTRY),0,(struct sock
add
r*)(&sendSock
Add
r),sizeof(struct sock
add
r)); if(error<0) { PrintEntry(&reqPacket.routeEntry[0]); printf("broadcast request packet failed! %d,%d,%d\n",error,sock,fdSet); } }
易语言Socket编程之Select模型
易语言Socket编程之Select模型源码,Socket编程之Select模型,CreateSocket,FD_CLR,FD_ISSET,FD_SET,FD_ZERO,ThreadAcceptProc,ThreadProc,GetClientInfo,
htonl
,ntohl,ntohs,
htons
,WSAStartup,WSACleanup,closesocket,bind,
inet
_ntoa,
inet
_
add
r,connect,send,re
linux socket 网络相关函数
inet
_
add
r,
inet
_aton,
inet
_ntoa,
htons
或
htonl
,
inet
_pton,
inet
_ntop比较
《1》
inet
_
add
r(): 简述:将一个点分十进制地址转换成一个in_
add
r,返回一网络字节顺序表示的Internet地址。 使用:server_
add
r.sin_
add
r.s_
add
r =
inet
_
add
r("192.168.0.10"); 《2》
inet
_aton() 将字符串表示的网络地址转换为该地址数值的整数表示,返回的数字总是按照网络字节顺序的。
inet
_
add
r与
inet
_a...
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章