sockaddr和sockaddr sockaddrin和sockaddr
在各种系统调用或者函数中,只要和网络地址打交道,就得用到这两个结构体。
网络中的地址包含3个方面的属性:
1 地址类型: ipv4还是ipv6
2 ip地址
3 端口
相应的,头文件有如下定义:
C代码
include<netinet/in.h>
structsockaddr{
unsignedshortsa_family;//2bytesaddressfamily,AF_xxx
charsa_data[14];//14bytesofprotocoladdress
};
//IPv4AF_INETsockets:
structsockaddr_in{
shortsin_family;//2bytese.g.AF_INET,AF_INET6
unsignedshortsin_port;//2bytese.g.htons(3490)
structin_addrsin_addr;//4bytesseestructin_addr,below
charsin_zero[8];//8byteszerothisifyouwantto
};
structin_addr{
unsignedlongs_addr;//4bytesloadwithinet_pton()
};
include <netinet/in.h>struct sockaddr {unsigned short sa_family; // 2 bytes address family, AF_xxxchar sa_data[14]; // 14 bytes of protocol address};// IPv4 AF_INET sockets:struct sockaddr_in {short sin_family; // 2 bytes e.g. AF_INET, AF_INET6unsigned short sin_port; // 2 bytes e.g. htons(3490)struct in_addr sin_addr; // 4 bytes see struct in_addr, belowchar sin_zero[8]; // 8 bytes zero this if you want to};struct in_addr {unsigned long s_addr; // 4 bytes load with inet_pton()};
注释中标明了属性的含义及其字节大小,这两个结构体一样大,都是16个字节,而且都有family属性,不同的是:
sockaddr用其余14个字节来表示sa_data,而sockaddr_in把14个字节拆分成sin_port, sin_addr和sin_zero
分别表示端口、ip地址。sin_zero用来填充字节使sockaddr_in和sockaddr保持一样大小。
sockaddr和sockaddr_in包含的数据都是一样的,但他们在使用上有区别:
程序员不应操作sockaddr,sockaddr是给操作系统用的
程序员应使用sockaddr_in来表示地址,sockaddr_in区分了地址和端口,使用更方便。
一般的用法为:
程序员把类型、ip地址、端口填充sockaddr_in结构体,然后强制转换成sockaddr,作为参数传递给系统调用函数
网络编程中一段典型的代码为:
C代码
intsockfd;
structsockaddr_inservaddr;
sockfd=Socket(AF_INET,SOCK_STREAM,0);
/*填充structsockaddr_in*/
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_port=htons(SERV_PORT);
inet_pton(AF_INET,"127.0.0.1",&servaddr.sin_addr);
/*强制转换成structsockaddr*/
connect(sockfd,(structsockaddr*)&servaddr,sizeof(servaddr));
int sockfd;struct sockaddr_in servaddr;sockfd = Socket(AF_INET, SOCK_STREAM, 0);/* 填充struct sockaddr_in */bzero(&servaddr, sizeof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_port = htons(SERV_PORT);inet_pton(AF_INET, "127.0.0.1", &servaddr.sin_addr);/* 强制转换成struct sockaddr */connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr));
更多阅读
美国的左派和右派 左派和右派
左和右是客观存在的现象,这种划分最初是根据座位来划分的,来自法国大革命时期,在议会中左派座在左边,右派座在右边。这种现象在现实中也得到了验证,对此左派和右派都认识到了这个现象,而且感觉这个现象非常神奇,其实也是可以解释
严介和 严介和称其发家史上无“原罪”
严介和 1960年生于江苏淮安。 1995年,注册成立江苏太平洋工程有限公司,任董事长;第二年6月完成“集团”更名登记,注册资金1.05亿元,任董事局主席兼总裁。2002年,注册成立中国太平洋建设集团有限公司,任董事局
严介和 严介和细说是是非非
“严介和”是近期出现在媒体频率最高的人之一,他的财富、他积累财富的速度、他的手段无一不被人猜测、质疑。严介和到底怎么想?他接受了本报记者的专访—— 记者李丰林 南京报道 2003年12月,记者第一次与严介和对话,听他高谈
加盟和代理有什么区别 直销、加盟和代理有和区别?
关于直销、加盟和代理 ,直销好还是加盟好呢,为什么有的厂商选择直销,有的选择加盟或代理呢?还有加盟与代理之间又有什么区别呢? 就加盟与代理而言,加盟的概念是加盟方投入货款资金,公司提供品牌与货源,以店面的形式来操作,面
面试技巧和注意事项 和批发商打交道的10大注意事项
1、注意个人形象,要有老板像,说话有水平,不说行外话;2、了解批发商的性格,投其所好,和他交朋友,可以得更多价位上的和调换货的好处;3、就算没有钱,也要装成大款,至少是成功商人的样子,才会受人尊敬,说话要有底气,别人才不会小看;4、凡事不要