Chinaunix首页 | 论坛 | 博客
  • 博客访问: 209446
  • 博文数量: 43
  • 博客积分: 2501
  • 博客等级: 少校
  • 技术积分: 485
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-07 21:45
文章分类

全部博文(43)

文章存档

2011年(3)

2010年(1)

2009年(21)

2008年(18)

我的朋友

分类: C/C++

2008-10-14 13:18:18

1.字节顺序相关函数
    计算机数据表示中有两种字节顺序little-endian和big-endian,little-endian的最高有效字节在高地址,最低有效字节在低地址,big-endian正好相反。例如,十六机制数0x1234用little-endian和big-endian分别表示如下
    低地址      0001 0010 0011 0100     0011 0100 0001 0010     高地址
              little
-endian:  12 34     big-endian: 34 12
    常见的little-endian机器如Intel x86,常见big-endian机器如IBM POWER, Moto 68000等。网络传输统一使用
big-endian字节顺序,因此需要对本地数据和网络数据进行字节顺序的转换,可以通过以下几个函数完成:
    #include
    uint16_t htons(uint16_t host16bitvalue);
    uint32_t htonl(uint32_t host32bitvalue);

    uint16_t ntohs(uint16_t net16bitvalue);
    uint32_t ntohl(uint32_t net32bitvalue);
前两个分别将本地16位和32位无符号整数转换为网络字节顺序,后两个完成相反的转换。


2.地址相关函数
    网络地址的字符表示和内部表示不一样,需要进行转换,通过一下几个函数完成:
    #include
    int inet_aton(const char *strptr, struct in_addr *addrptr);
    in_addr_t inet_addr(const char *strptr);
    char *inet_ntoa(struct in_addr inaddr);
前两个将网络地址的字符表示转换成内部表示,第三个完成相反转换
,这些函数仅对32位IPv4地址有效。可以处理IPv4和IPv6的函数如下:
    #include
    int inet_pton(int family, const char *strptr, void *addrptr);
    const char *inet_ntop(int family, const void *addrptr, char *strptr, size_t len);
参数family是AF_INET或者AF_INET6,如果family不支持则返回错误并将errno设置为EAFNOSUPPORT,参数len为字符表示的最大长度,用来防止缓冲区溢出。


3.主机名相关函数

    #include
    struct hostent *gethostbyname(const char *name);
   
struct hostent *gethostbyaddr(const char *addr, int len, 0);








阅读(1074) | 评论(0) | 转发(0) |
0

上一篇:进程环境

下一篇:TCP网络编程基础

给主人留下些什么吧!~~