主机序和网络序以及使用例子
2016-09-04 15:56
411 查看
为什么存在这两个东西:
空中传输的字节的顺序即网络字节序为标准顺序,考虑到与协议的一致以及与同类其它平台产品的互通,在程序中发数据包时,将主机字节序转换为网络字节序,收数据包处将网络字 节序转换为主机字节序
网络程序开发时 或是跨平台开发时 应该注意保证只用一种字节序 不然两方的解释不一样就会产生bug
主机序:
不同的CPU有不同的字节序类型 这些字节序是指整数在内存中保存的顺序 这个叫做主机序
1. Little endian:将低序字节存储在起始地址
2. Big endian:将高序字节存储在起始地址
LE little-endian
最符合人的思维的字节序
地址低位存储值的低位
地址高位存储值的高位
怎么讲是最符合人的思维的字节序,是因为从人的第一观感来说
低位值小,就应该放在内存地址小的地方,也即内存地址低位
反之,高位值就应该放在内存地址大的地方,也即内存地址高位
BE big-endian
最直观的字节序
地址低位存储值的高位
地址高位存储值的低位
为什么说直观,不要考虑对应关系
只需要把内存地址从左到右按照由低到高的顺序写出
把值按照通常的高位到低位的顺序写出
两者对照,一个字节一个字节的填充进去
网络序:
网络字节顺序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释。网络字节顺序采用big endian排序方式。
常用的转换函数:
htons ntohs htonl ntohl (s 就是short l是long h是host n是network)
例子:
空中传输的字节的顺序即网络字节序为标准顺序,考虑到与协议的一致以及与同类其它平台产品的互通,在程序中发数据包时,将主机字节序转换为网络字节序,收数据包处将网络字 节序转换为主机字节序
网络程序开发时 或是跨平台开发时 应该注意保证只用一种字节序 不然两方的解释不一样就会产生bug
主机序:
不同的CPU有不同的字节序类型 这些字节序是指整数在内存中保存的顺序 这个叫做主机序
1. Little endian:将低序字节存储在起始地址
2. Big endian:将高序字节存储在起始地址
LE little-endian
最符合人的思维的字节序
地址低位存储值的低位
地址高位存储值的高位
怎么讲是最符合人的思维的字节序,是因为从人的第一观感来说
低位值小,就应该放在内存地址小的地方,也即内存地址低位
反之,高位值就应该放在内存地址大的地方,也即内存地址高位
BE big-endian
最直观的字节序
地址低位存储值的高位
地址高位存储值的低位
为什么说直观,不要考虑对应关系
只需要把内存地址从左到右按照由低到高的顺序写出
把值按照通常的高位到低位的顺序写出
两者对照,一个字节一个字节的填充进去
网络序:
网络字节顺序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释。网络字节顺序采用big endian排序方式。
常用的转换函数:
htons ntohs htonl ntohl (s 就是short l是long h是host n是network)
例子:
。。。。。。 struct sockaddr_in client,server; char buf[MAX_LEN]; char flag[MAX_LEN]; FILE *fq_send=NULL,*fq_rec=NULL; int len,opt = 1; if( ( sd = socket(AF_INET,SOCK_STREAM,0)) == -1 ) { perror("socket"); exit(1); } bzero(&server,sizeof(server)); server.sin_family = AF_INET; server.sin_port = htons(SER_PORT);//将端口号的主机序转为网络序 server.sin_addr.s_addr = inet_addr("127.0.0.1"); setsockopt(sd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt)); if( connect(sd,(struct sockaddr *)&server,sizeof(server)) < 0 ) { perror("Connect"); close(sd); exit(1); } 。。。。。。
相关文章推荐
- kvm使用以及网络设置 解决桥接网络主机不能上网
- window.open的例子和使用方法以及参数说明(完整版)
- window.open的例子和使用方法以及参数说明
- VirtualBox 2.2.0使用主机网络上网的配置
- 使用scvmm2008管理vsphere主机以及vmotion实验
- vShpere云操作系统之四Vcenter Server添加esx主机以及添加网络和存储
- window.open的例子和使用方法以及参数说明(完整版)
- vShpere云操作系统之四Vcenter Server添加esx主机以及添加网络和存储
- 使用ARP协议发现网络中的主机
- XNA Game Studio是一套有着强大功能和简单界面的游戏制作平台,游戏开发商和游戏玩家都可以使用这套工具开发针对Windows XP以及Xbox360的游戏,XNA Game Studio分为两种版本,一种是面向初学者的EXPRESS版本,还有一种是面向专业用户的专业版。用户使用EXPRESS版本开发游戏完全免费,并且可以随意在PC上发行,不过用该工具开发的游戏若是在360上网络发行,就需要交纳99美元的年费。
- 使用scvmm2008管理vsphere主机以及vmotion实验
- JPCAP:使用Java来sniffer网络数据包(包含例子程序)
- 使用Microsoft Lookback网卡解决了断网情况下 Virtual Server 虚机和主机的网络连接
- window.open的例子和使用方法以及参数说明
- Java网络编程从入门到精通(6):使用getCanonicalHostName方法获得主机名
- VC6.0中gdiPlus的使用以及一个小例子
- window.open的例子和使用方法以及参数说明(完整版)
- 开发工具以及网络通讯使用的组件!
- VC6.0中gdiPlus的使用以及一个小例子
- linux下网络服务器模型以及使用时应该注意的问题