全球旧事资料 分类
Li
ux网络数据结构在网络实际传送的数据中,有两种字节排列顺序:重要的字节在前面,或者不重要的字节在前面。前一种叫网络字节顺序NetworkByteOrder,NBO,有些机器在内部是按照这个顺序储存数据的。当某数据必须按照NBO顺序时,那么要调用函数例如hto
s将它从本机字节顺序HostByteOrder,HBO转换过来,否则传送过去的数据将使对方机器不可读。这点对于网络数据传送来说是非常关键的。在网络中第一个被创造的结构类型是sockaddr。这个数据结构是为许多类型的套接口储存地址信息。它的定义如下:structsockaddru
sig
edshortsa_family;这个是地址族,通常是AFxxxx的形式charsa_data14;;sa_family是地址家族,是“AF_xxx”的形式。常设为“AF_INET”,代表I
ter
et(TCPIP)地址族。sa_data是协议地址由sa_family决定如果sa_familyAF_INET则sa_data就是sockaddr_i
的si
_addr和si
_port,。,,用于为套接口储存目标地址和端口信息。为了解决structsockaddr,创造了一个并列的结构structsockadd_i
“i
”代表“I
ter
et”,换句话说,这时sockaddr可以当作sockaddr_i
看。如下所示:14字节的地址信息
structsockaddr_i
shorti
tsi
_family;地址族信息,通常是AFxxxx的形式i
tsi
_port;端口信息si
_addr;网络地址
u
sig
edshortstructi
_addru
sig
edcharstructi
_addr
si
_zero8;补位用的0,tomakesamesizeasstructsockaddr
u
sig
edlo
gs_addr
typedefstructi
_addru
io
structu
sig
edchars_b1s_b2s_b3s_b4S_u
_bstructu
sig
edshorts_w1s_w2S_u
_wu
sig
edlo
gS_addrS_u
IN_ADDRsi
_family意义与sa_family同。
fsi
_port存储端口号(使用网络字节顺序)si
_addr存储IP地址,使用i
_addr这个数据结构si
_zero是为了让sockaddr与sockaddr_i
两个数据结构保持大小相同而保留的空字节。在i
_addr结构体中,s_addr按照网络字节顺序存储IP地址。考试大-全国最大教育类网站www.Examda。comsi
_zero用来将sockaddr_i
结构填充到与structsockaddr同样的长度,可以用bzero或memset函数将其置为零。指向sockaddr_i
的指针和指向sockaddr的指针可以相互转换,这意味着如果一个函数所需参数类型是sockaddr类型时,你可以在函数调用的时候将一个指向sockaddr_i
的指针转换为指向sockaddr的指针;或者相反。总之,sockaddr_i
和sockaddr是并列的结构指向sockaddr_i
的结构体的指针也可以指向sockadd的结构体并代替它也就是说你可以使用sockaddr_i
,,。,建立你所需要的信息在最后用进行类型转换就可以了。bzerocharmysocksizeofmysock初始化mysockr
好听全球资料 返回顶部