[转载]struct sockaddr_in等Socket编程相关数据类型定义

本文详细介绍了Socket编程中struct sockaddr_in等数据结构,以及高位字节优先和低位字节优先的概念。讲解了如何使用htons(), htonl()等函数进行字节顺序转换,并详细阐述了socket(), bind(), connect(), listen(), accept(), send(), recv()等关键函数的工作原理,以及在数据传输过程中的应用。此外,还提及了DNS域名服务的相关函数gethostbyname()。" 136408459,7947617,华为OD机试题:JavaScript实现雨花石平均分配,"['javascript', '算法', '华为OD机试真题']
摘要由CSDN通过智能技术生成

  计算机数据存储有两种字节优先顺序:高位字节优先和低位字节优先。Internet上数据以高位字节优先顺序在网络上传输,所以对于在内部是以低位字节优先方式存储数据的机器,在Internet上传输数据时就需要进行转换。

    我们要讨论的第一个结构类型是:struct sockaddr,该类型是用来保存socket信息的: 

  struct sockaddr { 

  unsigned short sa_family; /* 地址族, AF_xxx */ 

  char sa_data[14]; /* 14 字节的协议地址 */ }; 

  sa_family一般为AF_INET;sa_data则包含该socket的IP地址和端口号。 

  另外还有一种结构类型: 

  struct sockaddr_in { 

   short int sin_family; /* 地址族 */ 

   unsigned short int sin_port; /* 端口号 */ 

   struct in_addr sin_addr; /* IP地址 */ 

   unsigned char sin_zero[8]; /* 填充0 以保持与struct sockaddr同样大小 */ 

  }; 

  这个结构使用更为方便。sin_zero(它用来将sockaddr_in结构填充到与struct sockaddr同样的长度)应该用bzero()或memset()函数将其置为零。指向sockaddr_in 的指针和指向sockaddr的指针可以相互转换,这意味着如果一个函数所需参数类型是sockaddr时,你可以在函数调用的时候将一个指向sockaddr_in的指针转换为指向sockaddr的指针;或者相反。sin_family通常被赋AF_INET;sin_port和sin_addr应该转换成为网络字节优先顺序;而sin_addr则不需要转换。 

  我们下面讨论几个字节顺序转换函数: 

  htons()--"Host to Network Short" ; htonl()--"Host to Network Long" 

  ntohs()--"Network to Host Short" ; ntohl()--"Network to Host Long" 

  在这里, h表示"host" ,n表示"network",s 表示"short",l表示 "long"。 

  打开socket 描述符、建立绑定并建立连接 

  socket函数原型为: 

  int socket(int domain, int type, int protocol);

    参数domain指定使用何种的地址类型,完整的定义在/usr/include/bits/socket.h内,常见的定义如下 

PF_UNIX/PF_LOCAL/AF_UNIX/AF_LOCA

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值