科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件Socket编程相关数据类型定义

Socket编程相关数据类型定义

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

计算机数据存储有两种字节优先顺序:高位字节优先和低位字节优先。

作者:佚名 来源:天极网校 2007年10月20日

关键字: socket 编程 数据类型

  • 评论
  • 分享微博
  • 分享邮件
计算机数据存储有两种字节优先顺序:高位字节优先和低位字节优先。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参数指定socket的类型:SOCK_STREAM 或SOCK_DGRAM;protocol通常赋值“0”。Socket()调用返回一个整型socket描述符,你可以在后面的调用使用它。

  一旦通过socket调用返回一个socket描述符,你应该将该socket与你本机上的一个端口相关联(往往当你在设计服务器端程序时需要调用该函数。随后你就可以在该端口监听服务请求;而客户端一般无须调用该函数)。
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章