欢迎来到天天文库
浏览记录
ID:9972532
大小:422.02 KB
页数:27页
时间:2018-05-12
《嵌入式linux网络编程第3章》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第8章服务器和客户端信息的获取由于在网络传输的数据和本地的数据之间存在字节序的对应问题,本章介绍了网络程序设计中经常用到的网络字节序的概念,并对字节序的转换函数进行了详细的介绍。本章中还对经常用到的IP转化函数、DNS转换、协议名称处理等进行了介绍。主要包含如下内容:介绍了网络字节序和主机字节序的概念,并介绍如何进行网络字节序和主机字节序之间的转换。介绍了字符串IP地址和二进制IP地址之间的转换函数,例如,inet_aton()、inet_ntoa()、inet_addr()等,并介绍了协议无关的转换函数,例如
2、inet_pton()和inet_ntop()函数。介绍了如何使用gethostbyname()及gethostbyaddr()函数获得目标主机的信息,并简单介绍了DNS的概念。8.1字节序字节序是由于不同的主处理器和操作系统对大于一个字节的变量在内存中的存放顺序不同而产生的,例如两个字节的shortint和四个字节的int类型变量都有字节序的问题。字节序通常有大端字节序和小端字节序的两种分类方法。8.1.1大端字节序和小端字节序字节序是由于CPU和OS对多字节变量的内存存储顺序不同而产生的。1.字节序介绍2.
3、字节序的例子8.1.2字节序转换函数由于主机的千差万别,主机的字节序不能做到统一,但是对于网络上传输的变量,它们的值必须有一个统一的表示方法。网络字节序是指多字节变量在网络传输时的表示方法,网络字节序采用高端字节序的表示方法。这样小端字节序的系统通过网络传输变量的时候需要进行字节序的转换,大端字节序的变量则不需要进行转换。1.字节序转换函数介绍2.字节序转换的方法8.1.2字节序转换函数8.1.2字节序转换函数8.1.3一个字节序转换的例子下面的例子是对16位数值和32位数值进行字节序转换,每种类型的数值进行两
4、次转换,最后打印结果。1.16位字节序转换结构2.32位字节序转换结构3.变量值打印函数showvalue4.主函数main5.16位值0xabcd的二次转换6.32位值0x12345678的二次转换7.结果打印8.编译运行程序8.2字符串IP地址和二进制IP地址的转换人们可以理解的IP地址表达方式是类似“127.0.0.1”这样的字符串;而计算机理解的则是像0x01111111000000000000000000000001(127.0.0.1)这样表达的IP地址方式。在网络程序的设计中,经常需要进行字符串表
5、达方式的IP地址和二进制的IP地址之间的转换,本节对此类函数进行介绍。8.2.1inet_xxx()函数Linux操作系统有一组函数用于网络地址的字符串形式和二进制形式之间的转换,其形式为inet_xxx()。函数的原型如下:#include#include#include1.函数inet_aton()2.函数inet_addr()3.函数inet_network()4.函数inet_ntoa()5.函数inet_makeaddr
6、()6.函数inet_lnaof()7.函数inet_netof()8.结构structin_addr8.2.2inet_pton()和inet_ntop()函数函数inet_pton()和函数inet_ntop()是一套安全的协议无关的地址转换函数。所谓的“安全”是相对于inet_aton()函数的不可重入性来说。这两个函数都是可以重入的,并且这些函数支持多种地址类型,包括IPv4和IPv6。1.函数inet_pton()2.函数inet_ntop()8.2.3使用8.2.1小节地址转换函数的例子前面的两个小
7、节对地址转换函数进行了介绍,本节通过两个例子对上述函数进行简单的说明。测试结果表明函数inet_ntoa()、inet_addr()是不可重入的。1.初始化设置2.测试函数inet_aton()3.测试函数inet_addr()4.测试函数inet_ntoa()5.测试函数inet_ntoa()6.测试函数inet_lnaof()7.测试函数inet_lnaof()8.编译运行程序8.2.4使用函数inet_pton和函数inet_ntop的例子下面的代码是使用函数inet_pton和函数inet_ntop的例
8、子。在代码中对如何使用这两个函数使用函数inet_pton将字符串转换为二进制和使用函数inet_ntop将二进制IP地址转化为字符串的简单实例。#include#include#include#include#include#defineADDRLEN16intmai
此文档下载收益归作者所有