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

毕节市住房和城乡建设局网站iis7搭建网站

毕节市住房和城乡建设局网站,iis7搭建网站,公司概况简介,秦皇岛在哪muduo网络库剖析——网络地址InetAddress类 前情从muduo到my_muduo 概要socketaddr_in介绍成员用法 网络地址转换函数 框架与细节成员函数使用方法 源码结尾 前情 从muduo到my_muduo 作为一个宏大的、功能健全的muduo库#xff0c;考虑的肯定是众多情况是否可以高效满足考虑的肯定是众多情况是否可以高效满足而作为学习者我们需要抽取其中的精华进行简要实现这要求我们足够了解muduo库。 做项目 模仿 修改不要担心自己学了也不会写怎么办重要的是积累学到了这些方法如果下次在遇到通用需求的时候你能够回想起之前的解决方法就够了。送上一段话 概要 socketaddr_in 介绍 sockaddr是一个用于存储套接字地址的结构体它可以表示不同类型的地址包括IPv4、IPv6等。它通常用于bind、connect、recvfrom和sendto等函数的参数指明地址信息。然而sockaddr结构体存在一些弊端其中最主要的是sa_data字段将目标地址和端口信息混在一起这导致在使用某些网络函数时需要额外的处理才能正确地获取地址和端口信息。 为了解决sockaddr的缺陷出现了sockaddr_in结构体。与sockaddr相比sockaddr_in结构体将port和addr分开储存在两个变量中分别对应sin_port和sin_addr字段。这种结构使得地址和端口信息更加清晰易于处理。同时sockaddr_in结构体还提供了方便的函数来操作地址和端口信息例如inet_pton和inet_ntop等。 总的来说sockaddr_in相对于sockaddr具有更加清晰的结构和易于操作的字段因此在网络编程中通常更受欢迎。虽然sockaddr仍然可以使用但在处理IPv4地址时建议使用sockaddr_in结构体。 成员用法 sin_family sin_family是sockaddr_in结构体中的一个字段用于指定地址家族。在IPv4中sin_family的值为AF_INET表示使用IPv4地址。在IPv6中sin_family的值为AF_INET6表示使用IPv6地址。因此sin_family字段用于指明地址类型以便正确地处理和传输网络通信数据。sin_addr sin_addr是一个用于存储IP地址的字段它是sockaddr_in结构体的一部分。sin_addr字段通常用于表示IPv4地址使用无符号长整型(unsigned long)类型来存储32位的IP地址。通过使用inet_addr函数可以将字符串形式的IP地址转换为unsigned long类型的IP地址并将其赋值给sin_addr字段。在处理网络通信时sin_addr字段用于指明目标主机或服务器的IP地址以便正确地建立连接和传输数据。需要注意的是sin_addr字段的值应该以网络字节序存储因为网络通信中通常使用网络字节序进行数据传输。sin_port sin_port是一个用于存储端口号的字段它是sockaddr_in结构体的一部分。sin_port字段的数据类型是16位的无符号整数用于表示端口号。端口号的取值范围通常为065535其中01023为系统保留的端口号一般由系统分配给特定的服务程序。用户可以使用1024~65535之间的端口号。在处理网络通信时sin_port字段用于指明目标主机或服务器的端口号以便正确地建立连接和传输数据。需要注意的是sin_port字段的值应该以网络字节序存储因为网络通信中通常使用网络字节序进行数据传输。如果需要在主机字节序和网络字节序之间进行转换可以使用htons函数将主机字节序转换为网络字节序使用ntohs函数将网络字节序转换为主机字节序。sin_zero sin_zero是一个通常不使用的字段它是sockaddr_in结构体的一部分。sin_zero字段的存在只是为了与通用套接字地址结构struct sockaddr在内存中对齐通常会被置为0。因此在实际的网络编程中很少使用sin_zero字段。 网络地址转换函数 int inet_aton(const char *cp, struct in_addr *inp); inet_aton()将Internet主机地址cp从IPv4数字和点符号转换为二进制形式(以网络字节顺序)并将其存储在inp指向的结构中。Inet_aton()如果地址有效则返回非零如果无效则返回零。 如果提供的字符串被成功解释Inet_aton()返回1如果字符串无效(错误时没有设置errno)则返回0。 in_addr_t inet_addr(const char *cp); inet_addr()函数的作用是:将Internet主机地址cp从IPv4的数字点法转换为网络字节顺序的二进制数据。如果输入无效则返回INADDR_NONE(通常为-1)。使用这个函数是有问题的因为-1是一个有效的地址(255.255.255.255)。避免使用它而应使用inet_aton()、inet_pton(3)或getaddrinfo(3)它们提供了一种更清晰的方式来指示错误返回。 in_addr_t inet_network(const char *cp); inet_network()函数的作用是将cp (IPv4数字和点表法中的字符串)转换为适合用作Internet网络地址的主机字节顺序的数字。如果成功则返回转换后的地址。如果输入无效则返回-1。 char *inet_ntoa(struct in_addr in); inet_ntoa()函数的作用是:将Internet主机地址(以网络字节顺序给出)转换为IPv4点分十进制格式的字符串。字符串在静态分配的缓冲区中返回后续调用将覆盖该缓冲区。 inet_pton(int af, const char *src, void *dst) 该函数将字符串src转换为af地址族中的网络地址结构然后将该网络地址结构复制到dst。参数af必须是AF_INET或AF_INET6。DST是按网络字节顺序写的。 Inet_pton()成功时返回1(网络地址已成功转换)。0如果SRC不包含表示指定地址族中有效网络地址的字符串则返回。如果af不包含有效的地址族则返回-1并将errno设置为EAFNOSUPPORT。 与inet_aton(3)和inet_addr(3)不同inet_pton()支持IPv6地址。另一方面inet pton()只接受点分十进制表示法的IPv4地址而inet_aton(3)和inet_addr(3)允许更通用的数字和点表示法(十六进制和八进制数字格式以及不需要显式写入所有四个字节的格式)。对于同时处理IPv6 ad- 1地址和数字点表示法的IPv4地址的接口请参见getaddrinfo(3). const char *inet_ntop(int af, const void *src, char *dst, socklen_t size); 这个函数将af地址族中的网络地址结构src转换为字符串。结果字符串被复制到dst所指向的缓冲区dst必须是一个非空指针。调用方在参数size中指定此缓冲区中可用的字节数。 Inet_ntop()扩展了inet_ntoa(3)函数以支持多个地址族inet_ntoa(3)现在被认为是不推荐的而支持Inet_ntop()。目前支持的地址族如下: 如果成功inet_ntop()返回一个指向dst的非空指针。如果有错误则返回NULL并设置errno来指示错误。 uint32_t htonl(uint32_t hostlong); uint16_t htons(uint16_t hostshort); uint32_t ntohl(uint32_t netlong); uint16_t ntohs(uint16_t netshort); 框架与细节 成员 成员是一个sockaddr_in结构体具体见上面介绍。 函数 主要是构造函数构造分为sockaddr_in构造和ip地址端口号构造。网络地址结构的设置与获取以及网络地址的打印。 其中主要用到的函数inet_pton与inet_ntop将字符串src转换为af地址族中的网络地址结构与将af地址族中的网络地址结构src转换为字符串。htons与ntohs主机端口号变成网络端口号与网络端口号变成主机端口号。 使用方法 源码 //InetAddress.h #pragma once#include string #include sys/socket.h #include netinet/in.h #include arpa/inet.h #include strings.h#include copyable.h #include Log.hclass InetAddress : copyable { public:InetAddress(uint16_t port 8000, const char* ip 127.0.0.1);InetAddress(sockaddr_in addr) {addr_ addr;}uint16_t toPort() const {return ntohs(addr_.sin_port);}std::string toIp() const;std::string toIpPort() const;sa_family_t family() const {return addr_.sin_family;}sockaddr_in* getSockAddr() { return addr_; }void setSockAddr(sockaddr_in addr) { addr_ addr; }void setSockAddr(uint16_t port, const char* ip); private:struct sockaddr_in addr_; };//InetAddress.cpp #include InetAddress.hstd::string InetAddress::toIpPort() const {return toIp() : std::to_string(toPort()); }std::string InetAddress::toIp() const {char buf[64] {0};if (::inet_ntop(addr_.sin_family, addr_.sin_addr, buf, sizeof buf) nullptr) {LOG_ERROR(%s--%s--%d--%d : inet_ntop error\n, __FILE__, __FUNCTION__, __LINE__, errno);}return buf; }InetAddress::InetAddress(uint16_t port, const char* ip) {bzero(addr_, sizeof addr_);addr_.sin_family AF_INET;if (::inet_pton(addr_.sin_family, ip, addr_.sin_addr) ! 1) {LOG_FATAL(%s--%s--%d--%d : inet_pton error\n, __FILE__, __FUNCTION__, __LINE__, errno);}addr_.sin_port htons(port); }void InetAddress::setSockAddr(uint16_t port, const char* ip) {bzero(addr_, sizeof addr_);addr_.sin_family AF_INET;if (::inet_pton(addr_.sin_family, ip, addr_.sin_addr) ! 1) {LOG_FATAL(%s--%s--%d--%d : inet_pton error\n, __FILE__, __FUNCTION__, __LINE__, errno);}addr_.sin_port htons(port); } 结尾 以上就是网络地址InetAddress类的相关介绍以及我在进行项目重写的时候遇到的一些问题和我自己的一些心得体会。发现写博客真的会记录好多你的成长而且对于一个好的项目写博客也是证明你确实有过深度思考并且在之后面试或者工作时遇到同样的问题能够进行复盘的一种有效的手段。所以希望uu们也可以像我一样养成写博客的习惯逐渐脱离菜鸡队列向大佬前进加油 也希望我能够完成muduo网络库项目的深度学习与重写并在功能上能够拓展。也希望在完成这个博客系列之后能够引导想要学习muduo网络库源码的人更好地探索这篇美丽繁华的土壤。致敬chenshuo大神 鉴于博主只是一名平平无奇的大三学生没什么项目经验所以可能很多东西有所疏漏如果有大神发现了还劳烦您在评论区留言我会努力尝试解决问题
http://www.hkea.cn/news/14274660/

相关文章:

  • 惠州外贸网站建设推广做网站大概需要几步
  • 网站seo怎么优化wordpress大前端logo
  • 江苏神禹建设有限公司网站深圳的网站建设公司哪家好
  • 汽车用品网站源码外贸企业网站优化
  • 四川省建设网站电子签章网站规划与建设需求分析
  • 上海备案证查询网站查询网站查询系统江都建设银行网站
  • 网页制作与网站建设宝典 pdf设计自己的logo
  • 正规免费发布信息网站网站被黑能查到是谁做的吗
  • 郑州好的网站建设公司哪家好广告网站建设报价
  • 怎么制作网站建设宝安官网网站建设比较好的
  • 南宁网站建设培训班宿迁莱布拉网站建设
  • 注册公司那家网站做的比较好led灯笼河网站建设
  • 开放大学门户网站建设方案百度应用市场app下载安装
  • 可视化建站源码中国建设银行网站网上业务服务范围
  • 如何做的网站手机可以用吗免费网站建设基础步骤
  • 做网站套路长沙网络工程学院
  • 城阳网站改版网站开发摊销年限
  • 做网站的公司哪家有名办公室装修案例
  • 比较好的网站开发服务商邯郸做淘宝网站
  • 行情网免费网站大全电子商务策划书模板
  • 湖州网站建设哪家好查企业免费的网站
  • 做资源网站盈利点centos6.5 wordpress
  • 高中生做那个的网站在那做网站
  • 网站中在线咨询怎么做淄博周村网站建设报价
  • 网站建设 移动端网站icp备案有效时间
  • 网站开发人员应具备什么素质新媒体宣传推广方案
  • 商务网站创建方案建设网站需要什么
  • 网站算信息化建设唐山网站定制
  • 什么网站可以在线做考教师岗位的题wordpress自媒体模版
  • 苏州免费自助建站网站建设广州贝勤网络科技有限公司