首页 > 其他分享 >字节序转换接口

字节序转换接口

时间:2023-09-10 20:44:28浏览次数:35  
标签:转换 addr 阻塞 接口 IO ------ inet 字节

第一组

#include <arpa/inet.h>
	// 函数作用:将无符号整数hostlong从主机字节顺序转换为网络字节顺序。
	uint32_t htonl(uint32_t hostlong);
	// 函数作用:将无符号短整数hostshort从主机字节顺序转换为网络字节顺序。
	uint16_t htons(uint16_t hostshort);
	// 函数作用::将无符号整数netlong从网络字节顺序转换为主机字节顺序。
	uint32_t ntohl(uint32_t netlong);
	// 函数作用:将无符号短整数netshort从网络字节顺序转换为主机字节顺序。
	uint16_t ntohs(uint16_t netshort);
	// 说明:h代表主机host   n代表网络
	// network   s------->端口号short     l-------->IP地址
	// 返回值:成功返回要转换的字节序  失败返回-1
	// 适用范围在不同主机之间进行网络通信,如果是本机的各个程序之间就不需要转换,直接写端口和地址

第二组

#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
	// 功能:inet_aton()函数用于将点分十进制IP地址转换成网络字节序IP地址;
	// 返回值:如果这个函数成功,函数的返回值非零,如果输入地址不正确则会返回零;
	int inet_aton(const char *cp, struct in_addr *inp);
	// 功能:inet_addr()函数用于将点分十进制IP地址转换成网络字节序IP地址;
	// 返回值:如果正确执行将返回一个无符号长整数型数。如果传入的字符串不是一个合法的IP地址,将返回INADDR_NONE;
	in_addr_t inet_addr(const char *cp);

	in_addr_t inet_network(const char *cp);
	// 功能:inet_ntoa()函数用于网络字节序IP转化点分十进制IP;
	// 返回值:若无错误发生,inet_ntoa()返回一个字符指针。否则的话,返回NULL。其中的数据应在下一个WINDOWS套接口调用前复制出来;
	char *inet_ntoa(struct in_addr in);

	struct in_addr inet_makeaddr(in_addr_t net, in_addr_t host);

服务器编程中四种性能IO模型

  1. 阻塞IO

    • read(), recv(), recvfrom()
      这些函数本身是不具有阻塞属性,而是文件描述符的本身阻塞属性导致这个函数执行所表现出来的属性是阻塞
      在默认情况下,Linux下建立的socket套接字都是阻塞的
  2. 非阻塞情况IO

    • 给文件描述符添加非阻塞属性
      由于非阻塞属性,所有不断询问套接字中是否有数据到达
  3. 多路复用(重点掌握

    • 同时对多个IO口进行造作(也就是同时监听多个套接字)
      可以在规定时间内监测数据是否到达
  4. 信号驱动

    • 异步驱动
      当socket中有数据到达时,通过发送信号告知用户

阻塞IO

  • 读阻塞:当数据缓冲区中没有数据可以读取时,调用read,recv,recvfrom就会无限阻塞
  • 写阻塞:当缓冲区剩余的大小小于写入的数据量,就会发生写阻塞,知道缓冲区中的数据被读取

非阻塞IO

1.阻塞与非阻塞的差异
阻塞IO的流程
建立套接字(阻塞)------>读取了数据------>判断缓冲区中还有没有数据
------>如果没有数据------>进入无限等待------>直到有数据为止
------>如果有数据就读取数据------>进入无限等待------>直到有数据为止

非阻塞IO的流程
建立套接字(阻塞)------>将套接字设置为非阻塞属性-------->读取了数据------>判断缓冲区中还有没有数据?
------>如果没有数据------>读取失败------->接口马上返回,不会一直阻塞
------>如果有数据就读取数据------>接口也会返回

  1. 如何给文件描述符设置非阻塞属性
#include <unistd.h>
#include <fcntl.h>

	int fcntl(
		int fd,   // 参数1:文件描述符
		int cmd,   // 参数2:请求命令
		... /* arg */    // 参数3:填不填取决的第二个参数
	);
	// 第二个参数:F_GETFL(void)------>读取文件描述符的状态,第三个参数忽略
	//            F_SETFL(int)------->设置文件描述符的状态,第三个参数要填
	// 注意:O_CREAT,O_EXCL,0_NOCTTY,O_TRUNC----这些状态是不可以用fcntl去设置
	// O_APPEND, O_ASYNC,O_DIRECT,O_NONBLOCK,O_NOATIME这些状态是可以被设置的
	// 追加   信号触发模式   不使用缓冲区写入
	// O_NOATIME:不更新文件的修改时间
	// O_NONBLOCK:非阻塞属性
int fd = open("...", ...);
int status = fcntl(fd, F_GETFL);
status |= O_NONBLOCK;
fcntl(fd, F_SETFL, status);

标签:转换,addr,阻塞,接口,IO,------,inet,字节
From: https://www.cnblogs.com/bcc0729/p/17689314.html

相关文章

  • 用友U8与MES系统API接口对接案例分析
    企业数字化转型:轻易云数据集成平台助力U8ERP+MES系统集成为什么选择数字化转型?领导层对企业资源规划(ERP)的深刻理解促使了数字化转型的启动。采用精确的“N+5”滚动计划,为供应商提供充分的预期信息,确保准时化生产。精细管理刀具采购和车间设备,优化生产计划和过程。通过轻......
  • Node.js+Express+Koa2开发接口学习笔记(二)
    搭建开发环境从0开始搭建,不适用任何框架使用nodemon监测文件变化,自动重启node使用cross-env设置环境变量,兼容maxlinux和windows创建项目文件夹blog-1,在终端输入命令npminit-y在根目录下创建bin=>www.js文件,将初次运行的文件www.js存放在bin目录下。同时需要修改pack......
  • 双路CameraLink Base/ HPC 接口 单宽FMC 子卡模块
    概要QT7420是一款双路CameraLinkBase/HPC接口的单宽FMC子卡模块,它提供工业标准的摄像机链路接口,为用户提供了利用FPGA解决大运算量处理的能力。这些应用利用兼容的摄像机进行诸如帧抓取、数字视频通信和图像处理等。QT7420的PCB采用兼容设计,如果需要支持CameraLinkMediu......
  • 全功能双CameraLink SDR接口 FMC子卡
    QT7421使用LPC接口作为标准FMC接口,该板卡可应用于几乎全部的Xilinx开发板中及其他标准FMCFPGA载板。 QT7421的电气与机械设计依据FMC标准(ANSI/VITA57.1),支持风冷,能够满足用户在标准使用环境下的需求。原理框图技术指标CameraLink采用2个3MSDR0.8mm间距的连接器,分别作......
  • 达梦数据库教程:DM8性能诊断(内存、CPU、磁盘、网络、AWR日志和接口日志诊断)
    性能诊断一、前言1.1概念性能诊断用于了解操作系统以及数据库的各项性能指标是否达到要求,以满足系统正常运行需要。通过性能诊断,可以更好地了解系统资源的使用情况、以及数据库的状态,提前避免由于性能不足引发的各种问题。性能诊断在数据库运维中具有极大的实用价值。性能诊断包括......
  • Linux网络编程(TCP状态转换关系)
    (文章目录)前言本篇文章来讲解一下TCP的状态转换关系,学习这个状态转换关系对于我们深入了解网络编程是非常有必要的。一、TCP状态转换图二、TCP连接状态转换解析客户端状态转换:1.CLOSED->SYN-SENT:当客户端尝试与服务器建立连接时,客户端从CLOSED状态转换到SYN-SEND状态。......
  • Node.js+Express+Koa2开发接口学习笔记(一)
    http请求概述浏览器输入一个地址后,进行DNS解析(通过域名查找对应的IP地址),与server建立TCP连接(进行三次握手),发送http请求server接收到http请求,处理,并返回客户端(这里指浏览器)接收到返回数据,处理数据(如渲染页面,执行js)客户端与服务器的三次握手大致可以理解为:第一次握手:客......
  • 趣解接口隔离原则之《做个Rapper咋这么难?》
    〇、小故事不知道大家是否看过这样一个短视频——“姐姐去找她的弟弟,因为她的弟弟想要当rapper而荒废了学业,姐姐多番劝导也没有用,最后一怒一下,把弟弟的rapper发型剃了。没有了帅气的rapper发型,弟弟也放弃了当rapper的想法了。”这时候有的同学可能就会问,“扯淡!发型剃掉了就不当r......
  • 小知识分享:控制层尽量别暴露这样的接口,避免横向越权。
    前言谈不上是多么厉害的知识,但可能确实有人不清楚或没见过。我还是分享一下,就当一个小知识点。如果知道的,就随便逛逛,不知道的,Get到了记得顺手点个赞哈。正文1、接口别随便暴露当一个项目的维护周期拉长的时候,不断有新增的需求,如果经手的人也越来越多,接口是会肉眼可见增多......
  • 接口
    1.接⼝可以⽤来解决单⼀继承的问题,主要⽤于说明类具有何种功能的作⽤。2.通过关键字interface定义接⼝。3.接⼝中的所有⽅法必须都是公有的,且抽象,即默认隐式的publicabstract。4.接⼝不能被实例化。5.类可以通过implements实现接⼝中的所有的抽象⽅法,否则必须是抽象类......