socket 的地址结构

原创 2001年08月19日 15:21:00
在建立socket通信的过程中地址起着很关键的作用,在设计TCP/IP网络程序时,必须对 socket 的地址结构有清晰的认识。

TCP/IP 的地址数据结构。

struct sockaddr {

u_short safamily;/*地址族,AF_XXX*/

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

}

其中14字节的sa_data随协议而不同。在TCP/IP协议族中,地址数据结构为:

struct in_addr{

u_long s_addr;/*32比特的IP地址,网络字节顺序 */

};

struct sockaddr_in{

short sin_family; /*AF_INET*/

u_short sin_short; /*16比特的端口号,网络字节顺序*/

struct in_addr sin_addr; /*32比特的IP地址,网络字节顺序*/

char sin_zero[8]; /*未用*/

}

网络字节顺序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释。由主机字节顺序转换为网络字节顺序的两个函数如下:htons():将16比特的主机字节顺序数据转换为网络字节顺序htonl():将32比特的主机字节顺序数据转换为网络字节顺序与此相对应的将网络字节顺序转换为主机字节顺序的函数为:

ntohs():将16比特的网络字节顺序数据转换为主机字节顺序ntohl():将32比特的网络字节顺序数据转换为主机字节顺序由于各种socket地址结构的长度相差很大,TCP/IP地址族的地址长度为8字节,XNS地址为14字节,UNIX地址不定,最长可达110字节,所以无法以一种统一的格式定义它们,需要在bind()调用中明确指定socket地址的长度。

当bind()参数无效或端口已被其他程序所用时,函数返回-1,表明本次socket命名失败。

socket编程相关的结构体和字节序转换、IP、PORT转换函数

注意:结构体之间不能直接进行强制转换, 必须先转换成指针类型才可以进行结构体间的类型转换, 这里需要明确的定义就是什么才叫强制转换. 强制转换是将内存中一段代码以另一种不同类型的方式进行解读, 因此...
  • yangbingzhou
  • yangbingzhou
  • 2016年01月14日 15:39
  • 2188

socket编程之addrinfo结构体与getaddrinfo函数

1. 概述 IPv4中使用gethostbyname()函数完成主机名到地址解析,这个函数仅仅支持IPv4,且不允许调用者指定所需地址类型的任何信息,返回的结构只包含了用于存储IPv4地址的空间...
  • hustfoxy
  • hustfoxy
  • 2014年04月13日 16:56
  • 5285

如何求结构体成员的偏移地址 || 结构体的 sizeof 总结

C 语言中允许将值为 0 的变量强制转换成任一类型的指针,转换结果是一个NULL指针;(type*)0 // 一个 type 类型的NULL指针用这个指针访问结构体内的成员是非法的,但是&(((typ...
  • quzhongxin
  • quzhongxin
  • 2015年08月12日 16:22
  • 1187

Socket地址结构解析

Socket地址结构解析Socket地址结构简介  Socket的地址结构里封装了通信一方的地址及端口信息,这些信息在应用程序以及内核之间会进行传递,为建立Socket提供必要的信息。这里介绍四种so...
  • u012069890
  • u012069890
  • 2017年03月01日 20:20
  • 122

Socket地址结构

1、通用套接字地址结构 如bind函数的第二个参数类型就是通用套接字地址结构的指针,使用的时候一般需要把一个IPv4/IPv6套接字地址结构强制转换成一个通用通用套接字地址结构再取地址 2、IPv...
  • u011450367
  • u011450367
  • 2015年05月16日 13:49
  • 672

域名和网络地址结构体---struct hostent

该结构体定义如下:struct hostent { char *h_name; //主机名,即官方域名 char **h_aliases; //主机所有别名构成的字符串数组,同一I...
  • will130
  • will130
  • 2016年11月30日 21:20
  • 920

第三章 套接字编程(1) - 套接字地址结构

套接字地址结构 1. IPv4套接字地址结构    IPv4套接字地址结构通常称为“网际套接字地址结构”,它以sockadd_in命名,定义在 头文件中。    struct in_add...
  • u011628751
  • u011628751
  • 2015年11月20日 15:05
  • 539

我的网络编程学习之路——套接字地址结构

1.套接字地址结构 大多数套接字函数都需要一个指向套接字地址结构的指针作为参数。每个协议族都定义它自己的套接字地址结构。这些结构的名字均以sockaddr_开头,并以对应每个协议族的唯一后缀结尾。 1...
  • huangjh2017
  • huangjh2017
  • 2017年06月13日 20:11
  • 167

网络编程中常见地址结构与转换(IPv4/IPv6)

网络编程中常见地址结构与转换(IPv4/IPv6) 1. sockaddr/sockaddr_in/in_addr (IPv4)、sockaddr6_in/in6_addr/addr...
  • szq2k08
  • szq2k08
  • 2017年07月20日 10:08
  • 122

unix网络编程第一卷学习之套接字地址结构

1.ipv4的地址结构 ipv4的地址结构通常以“sockaddr_in”命名,定义在头文件中。套接字中肯定有地址和端口两项,还有用于区分协议族的一个字段,为了计算方便还有一个长度(unix域是变长...
  • fenguy
  • fenguy
  • 2013年04月03日 17:01
  • 412
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:socket 的地址结构
举报原因:
原因补充:

(最多只允许输入30个字)