5.13网络编程

只要在一个电脑中的两个进程之间可以通过网络进行通信那么拥有公网ip的两个计算机的通信是一样的。但是一个局域网中的两台电脑上的虚拟机是不能进行通信的,因为这两个虚拟机在电脑中又有各自的局域网所以通信很难实现。

socket套接字是一种用于网络间进行通信的方式,通过tcp与udp以及ip的方式与另外一个主机进行通信,为什么从传输层往下进行计算,因为应用层的方式协议非常的灵活,只要是有一个头和内容即可。

Linux在主机端都是小端存储的,在网络端是大端进行存储的,记忆方式就是那个图这个是大端存储的方式。

所以说将在主机端的信息发布到网络上的时候需要先将信息将小端的方式转化为大端的方式。

【注意】区分大小端的时候是按字节进行划分的,字节内的数据是有序的。分为高字节和低字节,所以可以通过将数据打印为char类型数据判断(ASCII)

【注意】转换端口或者是ip进行大小端的转化需要使用不同的函数因为两者的长度不同。

htonl32位的(host与net)【转化ip】将ip主机字节序转化为网络字节序。

htons16位的【转化端口】将端口的主机字节序转化为网络字节序。

当然可以转过去也可以转回来,ntohl和ntohs函数

大小端的转换并不常用,因为我们常常使用char *字符串类型,所以使用下面的函数

一般在写的时候都是char *ip字符串类型,在进行传输的不便于使用192.如果是字符串类型仅这一小部分这个就是三个字节,所以将这个点分十进制转化为32位01数转化为int类型数字

int inet_aton(char *ip, struct in_addr*inp)将char*类型转化为大端方式转化为struct in_addr,与下面的函数有区别 

in_addr_t inet_addr(char *ip)将char*转化为in_addr_t类型(小端的方式)

char* inet_ntoa()将大端转化为char*

存储IP和端口定义的结构体struct sockaddr_in存储ipv4类型数据

【注意】但是一套接口接口可以适用于ipv4和ipv6的通信,所以bind等函数中使用这样一种struct sockaddr通用的一个类似的说明符实际上却没有这样的一个结构体定义,所以在实际应用的时候将sockaddr_in或者sockaddr_in6强转为sockaddr类型

【注意】sockaddr_in 是一个socket类,型的结构体存储ipv4 or 6,存储ip只是这个ipstruct in_addr类型存储用和端口号。struct in_addr 与 in_addr_t类型是一 一对应的,就是说在结构体中实际上存储的就是in_addr_t,所以说在使用的时候注意区分两者。

DNS dns将域名转化为ip

可以多个域名映射同一个ip,可以多个ip映射同一个域名(例如百度)。

gethostbyname给域名变ip,得到更多细节的函数是getaddrinfo函数可以通过一个域名得到所有的ip地址。

socket基于TCP进行通信的方式

socket设置一个socket节点(理解为开辟一片区域,分配一个名字)

bind就是设置服务器监听的端口,还有ip???????????

listen?????????????

【注意】在服务器端是自己设置一个端口,在客户端进行随机分配端口,因为客户端如果也是固定端口,这样的话不同的服务程序可能产生冲突,所以采用固定端口的方式。

connect进行三次握手

accept在accept的时候是将原来的socket端点进行复制一个socket节点进行通信。

然后就是借助send和recv进行通信。

最后通过close进行四次挥手。

框架:

通过网络通信(考虑传输层和网络层socket定义)(应用层的传输规定相当的灵活不需要)--------》将主机上的数据传递到网络上去(注意数据存储的大小端的问题)--------》

注意一些问题:

1. 在主机和网络上进行传输时注意大小端问题

2. 注意区分struct in_addr 与 in_addr_t其实一回事,struct中有in_addr_t

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/622705.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux进程间几种通信机制

一. 简介 经过前一篇文章的学习, 我们知道Linux下有两种标准:system V标准和 Posix标准。 System V 和 POSIX 标准是操作系统提供的接口标准,它们规定了操作系统应该如何实现一些基本功能,比如线程、进程间通信、文件处理等。 …

【APM】在Kubernetes中搭建OpenTelemetry+Loki+Tempo+Grafana链路追踪(一)

文章目录 1、最终效果2、前提准备2、环境信息3、服务集成(Opentelemetry ->Tempo)3.1 上报链路数据3.1.1 下载opentelemetry-agent3.1.2 启动配置业务app3.1.3 配置opentelemetry输入输出3.1.4 配置grafana datasource3.1.4.1 配置tempo3.1.4.2 配置l…

基于RK3568的鸿蒙通行一体机方案项目

鸿蒙通行一体机方案以鸿蒙版AIoT-3568X人工智能主板为核心平台,搭载OpenHarmony操作系统,使用自研算法和国产芯片,可管可控,并提供身份识别以及其他外设配件生态链支持。 01 项目概述 项目使用场景 鸿蒙版通行一体机方案凭借自主…

【云计算小知识】云管理的作用是什么?

云计算已经成为推动企业数字化转型,提升运营效率的重要力量。而在这个过程中,云管理作为确保云计算环境稳定、高效运行的关键环节,其作用愈发凸显。今天我们小编就给大家详细介绍一下云管理的作用是什么? 云管理的作用是什么&…

探索渲染农场的高性能奥秘

在当今数字化的时代,渲染农场正逐渐成为许多行业不可或缺的强大工具。那么,为什么我们说渲染农场是高性能的计算机系统呢?让我们深入剖析其中关键要点。 “渲染农场”拥有大规模的计算资源。它由众多高性能的计算机节点组成,这些…

Maven、JavaWeb基础开发

1 Maven介绍 1、标准化的项目结构 2、标准化的构建流程 3、依赖管理 4、依赖范围 2 JavaWeb基础开发 2.1 Http协议 1 Http请求数据格式 2 Http响应数据格式 2.2 Web服务器(Tomcat) VTS、FileServer使用Tomcat部署; 其他服务单元TESLA S…

vue3.0(七) 计算属性(computed)

文章目录 1 计算属性(computed )1.1 computed使用1.2 computed使用场景1.4 computed的注意点1.4 computed的原理1.5 computed的示例 computed 和 Methods 的区别 1 计算属性(computed ) 在 Vue 3 中,computed 是一个用…

【AI大模型】自动生成红队攻击提示--GPTFUZZER

本篇参考论文为: Yu J, Lin X, Xing X. Gptfuzzer: Red teaming large language models with auto-generated jailbreak prompts[J]. arXiv preprint arXiv:2309.10253, 2023. https://arxiv.org/pdf/2309.10253 一 背景 虽然LLM在今天的各个领域得到了广泛的运用…

Nginx安全扫描借助lua-nginx-module模块增加授权

一、问题描述 某次安全扫描通过Dirsearch工具发现,nginx代理访问某后端业务时,发现:Springboot未授权漏洞,存在信息泄露风险,危险等级:中危; 相关资源:openresty官网、/lua-nginx-m…

结构体补充-位段

文章目录 位段介绍位段内存分配位段的使用注意事项结束 位段介绍 为什么会有位段呢? 我们直到一个int是4个字节表示32个bit位,但是比如2,3这样的整数,我们只需要2个bit位就可以了,那30个比特位不就是浪费掉了吗,所以位段就产生了 位段通过结构体来实现,位段表示方法…

Hive表数据优化

Hive表数据优化 1.文件格式 为Hive表中的数据选择一个合适的文件格式,对提高查询性能的提高是十分有益的。 (1)Text File 文本文件是Hive默认使用的文件格式,文本文件中的一行内容,就对应Hive表中的一行记录。 可…

C++之Eigen库基本使用(下)

1、常见变换 Eigen::Matrix3d //旋转矩阵(3*3) Eigen::AngleAxisd //旋转向量(3*1) Eigen::Vector3d //欧拉角(3*1) Eigen::Quaterniond //四元数(4*1) Eigen::Isom…

K8s:二进制安装k8s(单台master)

目录 一、安装k8s 1、拓扑图 2、系统初始化配置 2.1关闭防火墙selinx以及swap 2.2设置主机名 2.3在每台主机中添加hosts,做映射 2.4调整内核参数,将桥接的ipv4流量传递到iptables,关闭ipv6 2.4时间同步 3、部署docker引擎&#xff0…

【Kali Linux工具篇】wpscan的基本介绍与使用

介绍 WPScan是Kali Linux默认自带的一款漏洞扫描工具,它采用Ruby编写,能够扫描WordPress网站中的多种安全漏洞,其中包括主题漏洞、插件漏洞和WordPress本身的漏洞。最新版本WPScan的数据库中包含超过18000种插件漏洞和2600种主题漏洞&#x…

力扣【旋转函数】python

如果直接用暴力的话,只能过4个样例好像,超时 因此得用递推公式 F1F0前n-1个数-(n-1)*第n个数 F0sum(nums)-n*第n个数 nlen(nums) ans[]#定义一个存最大值值的列表 ss sum(nums) dm 0 for j in range(n):dm j * nums[j] ans.append(dm) print(dm) n…

MinIO学习笔记

MINIO干什么用的: AI数据基础设施的对象存储 为人工智能系统提供数据支持,数据存储;对象存储(Object Storage)是一种数据存储架构,它以对象为单位来处理、存储和检索数据,每个对象都包含了数据本…

GitHub和huggingface镜像网站

GitHub镜像网站 gitclone 如果网络原因打不开GitHub的话,可以用这个网站进行克隆项目,将克隆代码修改一下 git clone https://github.com/comfyanonymous/ComfyUI.git 修改 git clone https://gitclone.com/github.com/comfyanonymous/ComfyUI.git 这个…

JSON在线解析及格式化验证 - JSON.cn网站

JSON在线解析及格式化验证 - JSON.cn https://www.json.cn/

docker八大架构之应用服务集群架构

应用服务集群架构 在之前,一个应用层要负责所有的用户操作,但是有时用户增加后就会导致供不应求的现象(单个应用不足以支持海量的并发请求,高并发的时候站点响应变慢),这时就需要增加应用层服务器&#xf…

自动驾驶占据感知的综述:信息融合视角

24年5月香港理工的论文“A Survey on Occupancy Perception for Autonomous Driving: The Information Fusion Perspective“。 3D 占据感知技术旨在观察和理解自动驾驶车辆的密集 3D 环境。该技术凭借其全面的感知能力,正在成为自动驾驶感知系统的发展趋势&#x…