当前位置: 首页 > news >正文

台州市环保局网站开发区网站备案 公章

台州市环保局网站开发区,网站备案 公章,展示型企业网站有哪些举例,网站页面架构怎么写struct sockaddr和struct sockaddr_in这两个结构体用来处理网络通信的地址。 一、sockaddr sockaddr在头文件#include <sys/socket.h>中定义&#xff0c;sockaddr的缺陷是&#xff1a;sa_data把目标地址和端口信息混在一起了&#xff0c;如下&#xff1a; struct sock…


struct sockaddr和struct sockaddr_in这两个结构体用来处理网络通信的地址。

一、sockaddr

sockaddr在头文件#include <sys/socket.h>中定义,sockaddr的缺陷是:sa_data把目标地址和端口信息混在一起了,如下:

struct sockaddr {  sa_family_t sin_family;//地址族char sa_data[14]; //14字节,包含套接字中的目标地址和端口信息               }; 

二、sockaddr_in

sockaddr_in在头文件#include<netinet/in.h>或#include <arpa/inet.h>中定义,该结构体解决了sockaddr的缺陷,把port和addr 分开储存在两个变量中,如下:
这里写图片描述
sin_port和sin_addr都必须是网络字节序(NBO),一般可视化的数字都是主机字节序(HBO)。

三、总结

二者长度一样,都是16个字节,即占用的内存大小是一致的,因此可以互相转化。二者是并列结构,指向sockaddr_in结构的指针也可以指向sockaddr。

sockaddr常用于bind、connect、recvfrom、sendto等函数的参数,指明地址信息,是一种通用的套接字地址。
sockaddr_in 是internet环境下套接字的地址形式。所以在网络编程中我们会对sockaddr_in结构体进行操作,使用sockaddr_in来建立所需的信息,最后使用类型转化就可以了。一般先把sockaddr_in变量赋值后,强制类型转换后传入用sockaddr做参数的函数:sockaddr_in用于socket定义和赋值;sockaddr用于函数参数。

例子如下:

#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>int main(int argc,char **argv)
{int sockfd;struct sockaddr_in mysock;sockfd = socket(AF_INET,SOCK_STREAM,0);  //获得fdbzero(&mysock,sizeof(mysock));  //初始化结构体mysock.sin_family = AF_INET;  //设置地址家族mysock.sin_port = htons(800);  //设置端口mysock.sin_addr.s_addr = inet_addr("192.168.1.0");  //设置地址bind(sockfd,(struct sockaddr *)&mysock,sizeof(struct sockaddr); /* bind的时候进行转化 */... ...return 0;
}

题外话,两个函数 htons() 和 inet_addr()。

htons()作用是将端口号由主机字节序转换为网络字节序的整数值。(host to net)

inet_addr()作用是将一个IP字符串转化为一个网络字节序的整数值,用于sockaddr_in.sin_addr.s_addr。

inet_ntoa()作用是将一个sin_addr结构体输出成IP字符串(network to ascii)。比如:

printf("%s",inet_ntoa(mysock.sin_addr));
  • 1

htonl()作用和htons()一样,不过它针对的是32位的(long),而htons()针对的是两个字节,16位的(short)。

与htonl()和htons()作用相反的两个函数是:ntohl()和ntohs()。
这里写图片描述

addrinfo结构体原型

typedef struct addrinfo {
    int ai_flags;        //AI_PASSIVE,AI_CANONNAME,AI_NUMERICHOST
    int ai_family;        //AF_INET,AF_INET6
    int ai_socktype;    //SOCK_STREAM,SOCK_DGRAM
    int ai_protocol;    //IPPROTO_IP, IPPROTO_IPV4, IPPROTO_IPV6 etc.
    size_t ai_addrlen;            //must be zero or a null pointer
    char* ai_canonname;            //must be zero or a null pointer
    struct sockaddr* ai_addr;    //must be zero or a null pointer
    struct addrinfo* ai_next;    //must be zero or a null pointer
}

其中ai_flags、ai_family、ai_socktype说明如下:
参数            取值            值            说明
ai_family        AF_INET            2            IPv4
                AF_INET6        23            IPv6
                AF_UNSPEC        0            协议无关
ai_protocol        IPPROTO_IP        0            IP协议
                IPPROTO_IPV4    4            IPv4
                IPPROTO_IPV6    41            IPv6
                IPPROTO_UDP        17            UDP
                IPPROTO_TCP        6            TCP
ai_socktype        SOCK_STREAM        1            流
                SOCK_DGRAM        2            数据报
ai_flags        AI_PASSIVE        1            被动的,用于bind,通常用于server socket
                AI_CANONNAME    2
                AI_NUMERICHOST    4            地址为数字串

对于ai_flags值的说明:
AI_NUMERICHOST | AI_CANONNAME | AI_PASSIVE
如上表所示,ai_flags的值范围为0~7,取决于程序如何设置3个标志位,比如设置ai_flags为 “AI_PASSIVE|AI_CANONNAME”,ai_flags值就为3。三个参数的含义分别为:
(1)AI_PASSIVE当此标志置位时,表示调用者将在bind()函数调用中使用返回的地址结构。当此标志不置位时,表示将在connect()函数调用中使用。当节点名位NULL,且此标志置位,则返回的地址将是通配地址。如果节点名NULL,且此标志不置位,则返回的地址将是回环地址。
(2)AI_CANNONAME当此标志置位时,在函数所返回的第一个addrinfo结构中的ai_cannoname成员中,应该包含一个以空字符结尾的字符串,字符串的内容是节点名的正规名。
(3)AI_NUMERICHOST当此标志置位时,此标志表示调用中的节点名必须是一个数字地址字符串。

http://www.yayakq.cn/news/241424/

相关文章:

  • 整站快速排名网站开发视频压缩上传
  • 如何看网站的版本号网站建设实训 课程标准
  • 设计logo网站免费下载wordpress 访问控制
  • 小企业网络营销外包黄冈网站推广优化技巧
  • 网站的产品图片怎样做清晰嘉鱼网站建设多少钱
  • 网站备案流程详细免费1级做爰片在线观看 历史网站
  • 如何批量做网站深圳小程序网站开发
  • 上海专业做网站排名信息流优化师招聘
  • asp国外网站网店运营报告
  • 平顶山做网站多少钱为什么只有中国做网站需要备案
  • 制作网站公司 英语网站首页什么是商务网站
  • 合肥网站建设 八八四八提供虚拟主机服务的网站
  • 洛阳市住房和城乡建设局网站seo的优化技巧有哪些
  • 中企建设网站成都手机网站设计
  • 衣服网站设计珠海网站建设哪家专业
  • 深圳网站建设黄浦网络 骗钱无极网站维护
  • 对于学校网站建设的建议如何申请百度竞价排名
  • 做淘宝需要知道什么网站在货源网站自己拿样 加盟 做代理 哪个比较好?
  • 网站用品推广网页泰安软件公司 泰安网站建设
  • 原平的旅游网站怎么做的德州哪里有做网站推广的
  • asp个人网站源码下载唐山哪里做网站
  • 网站建立明细预计表怎样注册代理记账公司
  • 高端企业网站建设好的公司网站seo的主要优化内容
  • 毕业设计做网站 服务器怎么弄网页链接打不开怎么办
  • 南昌网站建设博客电脑 手机 微信网站开发
  • 车商城网站建设网站设计做什么
  • 淄博网站制作设计定制快速网站排名优化
  • 安徽合肥做网站怎么把现有网站开发php
  • 以学校为目标做网站策划书海鲜网站开发目的在于
  • 赣州那里有做网站的公司自己做的小网站如何发布