Chinaunix首页 | 论坛 | 博客
  • 博客访问: 89277
  • 博文数量: 48
  • 博客积分: 50
  • 博客等级: 民兵
  • 技术积分: 266
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-10 14:25
文章分类
文章存档

2012年(48)

我的朋友

分类:

2012-06-20 14:05:46

1、struct sockaddr
    存储套接字地址

点击(此处)折叠或打开

  1. struct sockaddr
  2. {
  3.     unsigned short sa_family; /*address族*/
  4.     char sa_data[14];         /*14bytes的协议地址*/
  5. }
    其中sa_family一般为AF_INET,sa_data包括了主机的地址、端口等信息。

2、struct sockaddr_in
    sockaddr_in是sockaddr的替代品,sin_family相当于sockaddr中的sa_family,sin_addr和sin_port必须是网络字节顺序的。

点击(此处)折叠或打开

  1. struct sockaddr_in
  2. {
  3.     short int sin_family;        /*Internet地址族*/
  4.     unsigned short int sin_port; /*端口号*/
  5.     struct in_addr sin_addr;     /*Internet地址*/
  6.     unsigned char sin_zero[8];   /*添0操作,目的是和struct sockaddr一样大小,可以通过bzero或memset实现*/
  7. }

3、struct in_addr

点击(此处)折叠或打开

  1. struct in_addr
  2. {
  3.     unsigned long s_addr;
  4. }

4、网络字节序 vs 主机字节序
    主机字节序是指机器内部对变量的字节存储顺序,有的机器是高位在前,有的则是低位在前。而网络传输要求大家的数据顺序是统一的。因此就需要进行字节序的转换。除此之外,转换的另一个好处是易于移植程序。
    相关转换函数: ('h':Host、'n':Network、's':Short、'l':Long)
    htons: 主机字节序转换为网络字节序(对无符号短整型,4bytes)
    htonl:  主机字节序转换为网络字节序(对无符号长整型,8bytes)

    ntohs: 网络字节序转换为主机字节序(对无符号短整型,4bytes)
    ntohl:  网络字节序转换为主机字节序(对无符号长整型,8bytes)

5、IP地址转换函数
    inet_addr:
        能将用数字和点表示的IP地址转换成一个无符号长整型,如

点击(此处)折叠或打开

  1. struct sockaddr_in pSock;
  2. pSock.sin_addr.s_addr = inet_addr("192.168.18.100");
        inet_addr返回的已经是网络字节序了,没必要再进行转换。

    inet_ntoa:
        打印IP地址(以数字加点的形式),如

点击(此处)折叠或打开

  1. struct sockaddr_in pSock;
  2. char *p;
  3. p = inet_ntoa(pSock.sin_addr);
  4. printf("%s\n",p);


   
阅读(587) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~