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

【网络编程详解】

在这里插入图片描述

🌈个人主页:努力学编程’
个人推荐
c语言从初阶到进阶
JavaEE详解
数据结构
学好数据结构,刷题刻不容缓:点击一起刷题
🌙心灵鸡汤总有人要赢,为什么不能是我呢
在这里插入图片描述

🔥🔥🔥网络编程

对于我们之前的编程,基本上都是基于本地机器的运行代码,但是在实际开发的时候,基本上都会有两大部分组成,特别是一些软件的开发,一般会有客户端和服务器,在编写这部分代码的时候,我们的代码要连接网络才能和其他的机器连接.下面给大家讲解一些关于网络的一些比较重要的知识.

⭐⭐⭐IP地址

对于每个每个电脑来说,我们可以进行联网操作,如果我们想要在整个互联网中快速找到这台机器的位置,就会涉及到一个非常重要的知识-IP,本质上来说IP就是这台电脑在互联网中的位置,我们要想找到一台机器的位置,就必须知道其IP地址.

这里教大家如何查看自己电脑的IP的位置

  • 在设置中搜索网络设置
  • 点击网络连接属性即可(win11)

在这里插入图片描述
或者win+R,输入cmd,在cmd中输入命令:ipconfig,也可以得到IP地址.
在这里插入图片描述

⭐⭐⭐端口号

我们有了IP地址,得到了每台机器的地址,在每台机器中,都会有接收数据,和发送数据的过程.端口就是记录每个接收数据和发送数据的进程,所以端口号本质: 端⼝号⽤于定位主机中的进程

就比如发送快递的时候,不但要填写收货地址(IP地址),还要填写收件人(端口)

此时虽然我们已经可以定位到一个电脑的IP地址,和端口(机器中的唯一的进程),但是网络通信的时候,我们传输数据的时候,都是将数据转换为0101这样的二进制的数据,然后传给另一台机器,但是接收的一方,如何由一堆的二进制代码,判断此时传输的数据到底是文本文件还是视频,还是图片,所以我们就得约定一套固定的东西来约定一下这些东西-协议

⭐⭐⭐协议

协议的作用就是为了在进行网络通信的时候,使每台电脑能够按照同一套规则进行数据的解析,这样就会让每一台电脑的数据都可以被其他的电脑接受和解析.总而言之,协议就是对于如何进行网络通信做了一个约定

由于网络通信的整个过程的细节非常庞大,如果只使用一个协议,就会导致这个协议结构复杂化,且有了高耦合的问题,所以就会对协议进行分层,每一层只干一个/一类问题,

OSI七层模型:
在这里插入图片描述

这种分层模式只存在于教科书中,并没有在实际应用中大量采用,在实际场景中我们最常用的是TCP/IP五层网络模型.

在这里插入图片描述
对于这五层模型,我们必须要理解,并最好可以熟练的讲出来,这也是我们面试的时候的一个高频考点.

  1. 应用层: 针对特定应用的协议
    在这里插入图片描述
  2. 传输层:传输层只关注网络通信的起点和终点,并不关心其中的细节,
  3. 网络层:进行网络通信的路径规划,同时还要负责地址的管理.
  4. 数据链路层:对于上面规划好的路线进行具体的实现,并对路线的具体过程有简单的记录
  5. 物理层:描述的是硬件层面需要满足怎样的条件,例如(网线有8根线)

而对于程序员来说我们可以干预的只有应用层,其他的都是交给操作系统或者硬件设备.

⭐⭐⭐网络设备所在的分层:

• 对于⼀台主机,它的操作系统内核实现了从传输层到物理层的内容,也即是TCP/IP五层模型的下四层;

• 对于⼀台路由器,它实现了从⽹络层到物理层,也即是TCP/IP五层模型的下三层;

• 对于⼀台交换机,它实现了从数据链路层到物理层,也即是TCP/IP五层模型的下两层;

• 对于集线器,它只实现了物理层;

🔥🔥🔥封装

对于网络通信的时候,如何传输数据的,这里一共有两个过程,封装和分用.

举个例子:
你使用QQ发送了一个hello给你的同学,此时你在输入框中输入字符串之后,数据就会被打包为一个应用层数据包,里面可能会有你的QQ号,接受者的QQ号,消息的发送时间,消息的内容…
在这里插入图片描述

然后应用层数据包就会以参数的形式被传递给传输层API调用,进入传输层,在传输层中进一步对数据进行包装,称为一个传输层数据包(传输层这里有很多协议,这里使用UDP演示).
在这里插入图片描述

进一步传输层数据包也会调用网络层的API,进入网络层,在网络层中也有很多的协议,这里我们以IPv4为例,在日常开发中如果没有强调的话,说的都是IPv4, IPv6还没有大量普及…然后对数据作进一步的加工处理:
在这里插入图片描述

然后进一步调用数据链路层的API,进入数据链路层,这里的协议主要是以太网,(我们平时的网线就是这个),对数据作进一步的加工-添加以太网帧头帧尾.
在这里插入图片描述
最后数据进入到物理层,将二进制数据转化为光信号,电信号这样的数据传输给真正的物理硬件…

我们上述都是在消息发送者的角度观察的,现在消息发出去,进入接受者视角,这个过程,其实和我们上述的过程刚好是相反的,对数据一步一步进行解析,这道最后进入应用层展示接受到的数据.

🔥🔥🔥网络套接字

操作系统给应用程序提供的API(传输层给应用层提供的API),即socket api
接下来我们就学习的是操作系统给到我们提供的socket(Java版)
这里的socket api提供了两个不同版本的api, UDP, TCP,

这里也有一个经典的面试题:UDP和TCP的区别:

  • TCP:有连接,可靠传输,面向字节流,双全工.
  • UDP:无连接,不可靠传输,面相数据报,双全工.
  1. 有无连接: 此处谈到的连接,并不是物理层面的连接,而是一种"抽象" 的连接.通信对方都保存了对方的信息,这就相当于"有连接",如果没有保存对方的信息,就表示的是"无连接"
  2. 是否可靠传输: 这里的可靠传输,并非是只100%可以到达对方,而是尽可能 相对来说不可靠传输:就是完全没有考虑是否能够达到对方~
    TCP:内置了一些机制,能够保证,可靠传输.
  • 感知到对方是不是收到了
  • 对方没有收到时,进行重试

UDP则没有可靠性机制
UDP则完全不管数据是否顺利传到了对方

面相字节流:
这里的字节流就和文件流/水流是一样的特点.

我们可以一次从文件中读取100个字节,也可以一次读写50个字节…
TCP可以一次读写100个字节,第二次50个字节…

面向数据报:
UDP每次传输数据的时候,都是以数据报为一个单位进行传输的.

双全工:一个通信链表,可以发送数据/也可以接受数据(双向通信)
预支对用的:单双工:一个通信链路,只能发送/只能接受(单向通信)

🔥🔥🔥UDP和TCP的使用

这里主要介绍一下UDP的使用,首先了解UDP的API

DatagramSocket 代表一个socket对象(可以理解为网卡这种硬件设备的抽象表达形式),我们就可以后面利用 DatagramSocket 间接操作网卡.

DatagramPacket代表一个数据报,里面的构造方法,可以出传递数据信息,IP地址以及端口号.

我们想要简单实现一个网络编程的场景,就需要两个程序:

  1. UDP 服务器
  2. UDP 客户端

主动发起通信的一方我们称为客户端,另一方就是服务器.

🔥🔥🔥UDP实现网络编程

这里我们模拟实现一个客户端给服务器发送一条短信 hello 的整个过程

服务器代码:

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;public class UdpEchoServer {private DatagramSocket socket=null;public UdpEchoServer(int port) throws SocketException {socket=new DatagramSocket(port);}//通过 start 启动服务器的核心流程public void start() throws IOException {System.out.println("服务器启动!!!");while(true){//此处通过 "死循环" 不停地处理客服端的请求//1.读取客户端的请求并解析DatagramPacket requestPacket=new DatagramPacket(new byte[4096],4096);socket.receive(requestPacket);//上述的数据是二进制的形式出现的,后续的代码如果进行打印之类的处理操作//需要转成字符串才处理好String request=new String(requestPacket.getData(),0,requestPacket.getLength());//2. 根据请求计算相应,由于此处是回显服务器,响应的就是请求String response=process(request);//3.把响应写回到客户端DatagramPacket responsePacket=new DatagramPacket(response.getBytes(),response.getBytes().length,requestPacket.getSocketAddress());//4.把日志打印一下System.out.printf("[%s:%d] req=%s, resq=%s\n",requestPacket.getAddress(),requestPacket.getPort(),request,response);}}public String process(String request){return request;}public static void main(String[] args) throws IOException {UdpEchoServer server=new UdpEchoServer(9090);server.start();}
}

客户端代码:

import java.io.IOException;
import java.net.*;
import java.util.Scanner;public class UdpEchoClient {private DatagramSocket socket = null;private String serverIP;private int serverPort;public UdpEchoClient(String serverIP, int serverPort) throws SocketException {socket = new DatagramSocket();this.serverIP = serverIP;this.serverPort = serverPort;}public void start() throws IOException {System.out.println("启动客户端");Scanner scanner = new Scanner(System.in);while (true) {// 1. 从控制台读取到用户的输入.System.out.print("-> ");String request = scanner.next();// 2. 构造出一个 UDP 请求, 发送给服务器.DatagramPacket requestPacket = new DatagramPacket(request.getBytes(), request.getBytes().length,InetAddress.getByName(this.serverIP), this.serverPort);socket.send(requestPacket);// 3. 从服务器读取到响应DatagramPacket responsePacket = new DatagramPacket(new byte[4096], 4096);socket.receive(responsePacket);String response = new String(responsePacket.getData(), 0, responsePacket.getLength());// 4. 把响应打印到控制台上.System.out.println(response);}}public static void main(String[] args) throws IOException {// UdpEchoClient client = new UdpEchoClient("47.108.28.88", 9090);UdpEchoClient client = new UdpEchoClient("127.0.0.1", 9090);client.start();}
}

相关文章:

【网络编程详解】

🌈个人主页:努力学编程’ ⛅个人推荐: c语言从初阶到进阶 JavaEE详解 数据结构 ⚡学好数据结构,刷题刻不容缓:点击一起刷题 🌙心灵鸡汤:总有人要赢,为什么不能是我呢 &#x1f525…...

C# winform三层架构 实现增删改查( 显示数据,查询数据 显示,查询篇)

一.留言 上一篇讲解了如何去添加数据,那么本章节我们来做,添加数据后显示,以及咋现有的数据里,查询我们所需要的数据。 二.显示 首先我们看上一篇更新,我们在添加成功后跳转页面显示数据,那么跳转代码只…...

Apache Kylin 系列入门教程

Apache Kylin 是一款开源的分布式分析引擎,主要用于提供SQL接口及多维分析(OLAP)能力以支持超大规模数据集。它能在亚秒级时间内完成PB级别的数据查询。本文将带你一步步了解如何安装、配置和使用Apache Kylin来构建数据仓库,并执…...

如何识别并防御漏洞扫描类攻击

随着网络安全威胁的不断演变,漏洞扫描已成为黑客常用的手段之一,旨在发现目标系统中的弱点以便进行后续攻击。高防服务作为一种专业的安全防护措施,能够在一定程度上识别并阻止这类攻击行为。本文将深入探讨高防服务是如何识别并防御漏洞扫描…...

冷思考:低代码的AI Agent构建平台能创造价值吗?

当前AI 圈中热点讨论的产品,除了以ChatGPT为代表的Chatbot领域,以及以Character.ai 为代表的AI虚拟社交领域,另一个热度较高的领域就是AI Agent领域。 大模型发展到今天,已经基本达成了一个共识:错综复杂的工作任务无…...

Spring Boot如何自定义注解?

1.什么是注解 注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元…...

gin框架传入的gin.context参数是池化的

1. gin.context参数不但是池化的,而且是指针 2. 但是gin.context又实现了context的接口。因此,可以当作context去使用 3. 这就会导致一个很严重的问题: 1. 池化导致了复用后的ctx将会将之前使用的ctx中的内容进行覆盖。 2. 实现了context接…...

AWS注册是否必须使用美元银行卡

亚马逊网络服务(AWS)作为全球领先的云计算平台,吸引了众多企业和个人用户。然而,不少人在注册AWS账户时会产生疑问:是否必须使用美元银行卡?实际上,这种说法并不准确。虽然AWS的主要结算货币是美元,但用户在注册和使用过程中有多种支付方式可供选择。我们结合九河云的分析来告…...

Spring IOC 注入的3种方式

Spring IOC 注入的3种方式 1. 构造器注入(Constructor Injection)2. Setter方法注入(Setter Injection)3. 字段注入(Field Injection) 💖The Begin💖点点关注,收藏不迷路…...

无人机影像基于机器学习的遥感反演及其结果可视化,定量遥感反演结果出图,相关性分析,指标筛选,特征选择

无人机影像或者卫星遥感反演分类模型的建立,反演模型的可视化制图出图,相关性分析,指标筛选,特征选择。代码太多,可企鹅联系: 指标的相关性分析。572 特征选择,贡献性最大的特征。412 LAI反演&…...

Eclipse插件之Java Dependency Viewer(显示类和包的关系图)

Java Dependency Viewer 插件的作用 Eclipse插件Java Dependency Viewer是一个为Java项目提供依赖关系可视化功能的工具。 在复杂的Java项目中,理解和分析类与类之间、包与包之间的依赖关系是非常有用的。Java Dependency Viewer插件通过生成依赖关系图&#xff0c…...

H5小游戏出海,如何流量变现?

根据数据显示, 90%的轻度休闲游戏收入来自广告,即IAA(In-App Advertising)。使用这种形式进行变现的游戏类型大多以超休闲游戏为主,玩法简单、游戏内容轻度、风格简洁、游戏时间碎片化且即时娱乐性较高,收益…...

轻空间六大专利优势:引领气膜建筑新时代

在绿色建筑和科技创新的驱动下,轻空间不断突破传统建筑的限制,推出了一系列具有前瞻性和高性能的专利技术。通过这些技术,轻空间不仅为建筑行业注入了新动力,也为未来的气膜建筑设定了更高的标准。 低碳建材:“clearsk…...

LeetCode-day37-2940. 找到 Alice 和 Bob 可以相遇的建筑

LeetCode-day37-2940. 找到 Alice 和 Bob 可以相遇的建筑 题目描述示例示例1:示例2: 思路代码 题目描述 给你一个下标从 0 开始的正整数数组 heights ,其中 heights[i] 表示第 i 栋建筑的高度。 如果一个人在建筑 i ,且存在 i &…...

unity 判断平台

原文链接 Unity中判断平台的方法 Unity提供了一些方法来判断当前运行的平台,其中包括了判断是否为i0S平台。以下是几种常用的方法1.Application.platform Applicaion,platom 是Unity中的一个枚举类型,用于表示当前运行的平台。可以通过比较 Apication,p…...

PyCharm找不到Python了咋办

Python发生了重装的,且新的路径和原有路径不同,就会出现如下的错误: 解决办法: 点开PyCharm菜单的File/Setting 然后: 有上图的提示,说明需要将原来的venv进行清空。 如此操作之后,原来的红色…...

BRC-100 协议

BRC-100 协议 BRC-100 是一种基于序数理论的可扩展的去中心化计算协议。 BRC-100 协议会以下面的方式定义。未来所有的 BRC-100 协议栈都应该使用类似的规范来定义。 1. 摘要 BRC-100 协议是一种基于序数理论的可扩展的去中心化计算协议。 2. 抽象 BRC-100 协议本质上描述…...

茶余饭后(六)

年少成长的时候,多遇到一些所谓的“坏人”,“烂人”,其实是好的,因为这些人让你见识到了人性最丑陋的一面,他们让你磨炼了心性,在以后遇到难处理的人或事的时候,能够有一定的心理承受能力。遇见…...

秋招复习笔记——八股文部分:网络IP

终于来到了网络的最后一篇,继续加油! IP 知识全家桶 IP 基本认识 IP 在 TCP/IP 参考模型中处于第三层,也就是网络层。 网络层的主要作用是:实现主机与主机之间的通信,也叫点对点(end to end&#xff09…...

量化投资基础(四)之AR、MA、ARMA与ARIMA模型

点赞、关注,养成良好习惯 Life is short, U need Python 量化投资基础系列,不断更新中 1 引言 时间序列经典模型主要有: 自回归模型(Auto Regressive,AR)移动回归模型(Moving Average,MA&…...

LVS(Linux Virtual Server)详解

LVS(Linux Virtual Server)是一个用于负载均衡的开源软件项目,旨在通过集群技术实现高性能、高可用的服务器系统。它运行在Linux操作系统上,并且可以利用内核级的资源来提高性能和稳定性。 思维导图 LVS的工作原理 LVS主要基于Ne…...

uniapp版本更新除了plus.runtime.getProperty的解决办法

以下是展示图 带尺寸的图片: 首先把以下代码放到想要更新弹出的页面 //template部分<uni-popup ref"popup" background-color"#fff"><versionUp handleCloseVersion"closeVersion"></versionUp></uni-popup>//script…...

MySQL笔记-基础篇(二):多表查询

​ 博客主页: 南来_北往 系列专栏&#xff1a;Spring Boot实战 前言 MySQL的多表查询是一项非常实用的数据库操作技术&#xff0c;它能够通过关联不同表中的数据来提供更加丰富和准确的信息。在实际应用中&#xff0c;数据通常不是孤立存在的&#xff0c;而是分布在多个…...

备战秋招60天算法挑战,Day15

题目链接&#xff1a; https://leetcode.cn/problems/minimum-window-substring/ 视频题解&#xff1a; https://www.bilibili.com/video/BV1sJ4m1g727/ LeetCode 76. 最小覆盖子串 题目描述 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s …...

【学习笔记】Matlab和python双语言的学习(整数规划和0-1规划)

文章目录 前言一、整数规划和0-1规划二、典型示例1.背包问题2.指派问题 三、代码实现----Matlab1.Matlab 的 intlinprog 函数2.Matlab 代码背包问题指派问题 四、代码实现----python背包问题指派问题 总结 前言 通过模型算法&#xff0c;熟练对Matlab和python的应用。 学习视频…...

【连续4届EI检索,SPIE 出版】第五届信号处理与计算机科学国际学术会议(SPCS 2024,8月23-25)

第五届信号处理与计算机科学国际学术会议&#xff08;SPCS 2024) 将于2024年8月23-25日在中国哈尔滨举行。会议主要围绕信号处理与计算机科学等研究领域展开讨论。 会议旨在为从事信号处理与计算机科学研究的专家学者、工程技术人员、技术研发人员提供一个共享科研成果和前沿技…...

Vue屏蔽Console.Log打印信息

Vue屏蔽打印信息 安装 npm install uglifyjs-webpack-plugin --save-dev 在vue.config.js文件或者webpack.prod.conf.js中配置 vue.config中 const UglifyJsPlugin require(uglifyjs-webpack-plugin) // 屏蔽打印数据 module.exports {optimization: {minimizer: [new Ugl…...

数据结构之《二叉树》(下)

在二叉树(中)了解了堆的相关概念后还实现了堆&#xff0c;并且还实现了堆排序&#xff0c;以及解决了TOP-K问题。接下来在本篇中将继续学习二叉树中的链式结构&#xff0c;会学习二叉树中的前、中、后三种遍历并实现链式结构的二叉树&#xff0c;接下来就开始本篇的学习吧&…...

用Python打造精彩动画与视频,9.3 项目案例分享与反思

第九章&#xff1a;综合项目 9.3 项目案例分享与反思 在本节中&#xff0c;我们将分享几个成功的项目案例&#xff0c;并进行反思总结。这些案例将展示如何将前面所学的Python技术运用于实际项目中&#xff0c;同时我们将讨论项目中的挑战和解决方案&#xff0c;以及从中得到…...

分布式主键 详解

文章目录 雪花算法结合分库分表的问题问题出现原因分析解决思路 分布式主键要考虑的问题主键生成策略雪花算法详解时间戳位问题工作进程位问题序列号位问题根据雪花算法扩展基因分片法 雪花算法结合分库分表的问题 问题出现 使用ShardingSphere框架自带的雪花算法生成分布式主…...