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

网络编程(TCP协议,UDP协议)

目录

网络编程三要素

IP

IPv4

InetAddress类

端口号

协议

UDP协议

UDP协议发送数据

UDP协议接收数据

UDP的三种通信方式(代码实现)

TCP协议

TCP通信程序

三次握手和四次挥手 

练习 

1、客户端:多次发送数据服务器:接收多次接收数据,并打印

2、客户端:发送一条数据,接收服务端反馈的消息并打印

服务器:接收数据并打印,再给客户端反馈消息

3、客户端:将本地文件上传到服务器。接收服务器的反馈。服务器:接收客户端上传的文件,上传完毕之后给出反馈。



什么是网络编程?

在网络通信协议下,不同计算机上运行的程序,进行的数据传输。

常见软件架构有哪些?

CS/BS

通信的软件架构CS\BS的各有什么区别和优缺点

CS:客户端服务端模式需要开发客户端

BS:浏览器服务端模式不需要开发客户端,

CS:适合定制专业化的办公类软件如:IDEA、网游

BS:适合移动互联网应用,可以在任何地方随时访问的系统


C/S(Client/Server)架构是一种分布式计算模型,其中客户端和服务器分别承担不同的功能和责任。客户端是面向用户的界面和应用程序,负责向用户提供交互界面和功能。服务器则负责处理客户端发送的请求,进行数据处理和存储,并将处理结果返回给客户端。

B/S(Browser/Server)架构也是一种分布式计算模型,类似于c/s架构。不同之处在于,b/s架构中的客户端是基于浏览器的Web应用程序,通过浏览器访问Web服务器上的应用程序。服务器处理客户端请求,并将结果通过Web页面返回给客户端。

总体而言,c/s架构适用于需要实现复杂业务逻辑和功能的应用程序,而b/s架构适用于面向广大用户的Web应用程序。

网络编程三要素

IP:设备在网络中的地址,是唯一的标识。

端口号:应用程序在设备中唯一的标识。

协议:数据在网络中传输的规则,常见的协议有UDP、TCP、http、https、ftp。

IP

全称:Internet Protocol,是互联网协议地址,也称IP地址。
是分配给上网设备的数字标签。

常见的IP分类为:IPv4、IPv6

IPv4

全称:Internet Protocol version4,互联网通信协议第四版

采用32位地址长度,分成4组

网际协议版本4(IPv4)是互联网通信中应用最广泛的网络协议之一,它负责将数据包从源头发送到目的地。IPv4使用32位地址格式,能够提供约43亿个独立的地址。这些地址被用于在互联网上唯一标识每个网络设备,如计算机、手机或其他终端设备。

IPv4的核心功能包括无连接的数据传输和最大努力交付。无连接意味着在数据传输之前,不需要建立持久的连接状态。每个数据包都是独立处理并路由至目标地址。最大努力交付则表明该协议尽力将数据包传送到目的地,但不保证所有数据包均能成功到达,也不保证它们会按顺序到达。这些特性需要由更高层的协议,如传输控制协议(TCP),来加以管理和修正。

IPv4的设计和结构对其普及和功能至关重要。IPv4数据包包含一个固定长度的头部,通常为20字节,后面可跟随可选的扩展部分。固定头部包括多个字段,如版本号、首部长度、总长度、标识、标志、片偏移、生存时间(TTL)、协议、首部校验和、源地址和目的地址等。这些字段共同确保了数据包的正确传输及其优先级、路由和错误校验。

由于IPv4地址的枯竭问题,互联网社区早在1990年代就开始研究替代方案。最终,网际协议版本6(IPv6)被开发出来,以解决地址空间不足的问题。IPv6使用128位地址格式,可以提供近乎无限的地址空间。尽管IPv6在技术上解决了IPv4的许多限制,但由于技术升级和迁移的复杂性,IPv6的普及速度相对较慢。

总结来说,IPv4作为互联网的基础协议,虽然存在一些限制,但它在过去几十年里成功地支撑了互联网的迅猛发展。然而,随着IPv4地址的耗尽和互联网需求的不断增长,向IPv6的过渡已成为不可逆转的趋势。未来,IPv6可能会完全取代IPv4,成为互联网通信的主流协议。

InetAddress类

static InetAddress getByName(string host)        确定主机名称的IP地址,主机名称可以是机器名称,也可以是IP地址
String getHostName()        获取此IP地址的主机名
String getHostAddress()        返回文本显示中的IP地址字符串

package InetAddress24_6_21;import java.net.InetAddress;
import java.net.UnknownHostException;public class InetAddressDemo1 {public static void main(String[] args) throws UnknownHostException {//1.获取InetAddress的对象// IP的对象 一台电脑的对象InetAddress address=InetAddress.getByName("努力敲代码的小火龙");System.out.println(address);String name = address.getHostName();System.out.println(name);String ip = address.getHostAddress();System.out.println(ip);}
}

端口号

应用程序在设备中唯一的标识。

端口号:由两个字节表示的整数,取值范围:0~65535

其中0~1023之间的端口号用于一些知名的网络服务或者应用。

我们自己使用1024以上的端口号就可以了。

注意:一个端口号只能被一个应用程序使用,

协议

计算机网络中,连接和通信的规则被称为网络通信协议

OSI参考模型和TCP/IP参考模型是网络通信中常用的两种参考模型,用于描述计算机网络中不同层次的协议和功能。两种参考模型的各层对应的协议如下:

OSI参考模型的七层对应协议:
1. 物理层:主要负责传输比特流,按照电气、光学或者机械方式传送信号。没有具体的协议对应。
2. 数据链路层:主要负责将比特流分成具有特定意义的帧,并进行错误检测和纠正。常用的协议有以太网(Ethernet)和无线局域网(Wi-Fi)。
3. 网络层:主要负责将数据包从源主机传输到目标主机,包括寻址、路由选择和包分片等功能。常用的协议有Internet协议(IP)。
4. 传输层:主要负责提供端到端的可靠数据传输,包括流量控制和拥塞控制等功能。常用的协议有传输控制协议(TCP)和用户数据报协议(UDP)。
5. 会话层:主要负责建立、管理和终止应用程序之间的通信会话。没有具体的协议对应。
6. 表示层:主要负责处理数据的表示和转换,确保不同主机上的应用程序能够解释和理解数据的意义。没有具体的协议对应。
7. 应用层:最上层的应用程序直接面向用户,并提供特定的网络服务,例如电子邮件(SMTP)、文件传输(FTP)和域名系统(DNS)等。

TCP/IP参考模型的四层对应协议:
1. 网络接口层(网络接入层):主要负责将数据链路层的帧封装为IP数据包,并进行物理传输。常用的协议有以太网(Ethernet)和无线局域网(Wi-Fi)。
2. 网际层(互联网层):主要负责将数据包从源主机传输到目标主机,包括寻址、路由选择和包分片等功能。常用的协议有Internet协议(IP)。
3. 传输层:主要负责提供端到端的可靠数据传输,包括流量控制和拥塞控制等功能。常用的协议有传输控制协议(TCP)和用户数据报协议(UDP)。
4. 应用层:最上层的应用程序直接面向用户,并提供特定的网络服务,例如电子邮件(SMTP)、文件传输(FTP)和域名系统(DNS)等。

需要注意的是,TCP/IP参考模型的网络接口层对应了OSI参考模型的物理层和数据链路层。因此,TCP/IP参考模型只有四层,而OSI参考模型有七层。

UDP协议

用户数据报协议(User Datagram Protocol)
UDP是面向无连接通信协议。
速度快,有大小限制一次最多发送64K,数据不安全,易丢失数据

UDP协议发送数据

package UDPDemo;import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;public class SendMessageDemo {public static void main(String[] args) throws IOException {//发送数据//创建Datagramsocket对象//绑定端口,以后我们就是通过这个端口往外发送// 空参:所有可用的端口中随机一个进行使用// 有参:指定端口号进行绑定DatagramSocket ds=new DatagramSocket();//打包数据String str="hello world";byte[] bytes=str.getBytes();InetAddress address=InetAddress.getByName("127.0.0.1");int port=10086;//数据打包DatagramPacket dp=new DatagramPacket(bytes,bytes.length,address,port);//发送数据ds.send(dp);//释放资源ds.close();}
}

UDP协议接收数据

package UDPDemo;import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;public class ReceiveMessageDemo {public static void main(String[] args) throws IOException {//1.创建Datagramsocket对象(快递公司)//在接收的时候,一定要绑定端口//而且绑定的端口一定要跟发送的端口保持一致DatagramSocket ds=new DatagramSocket(10086);//接收数据包byte[] bytes=new byte[1024];DatagramPacket dp=new DatagramPacket(bytes,bytes.length);//该方法是阻塞的,程序执行到这一步的时候,会在这里死等,等发送端发送消息ds.receive(dp);//解析数据包byte[] data=dp.getData();int len=dp.getLength();InetAddress address=dp.getAddress();int port=dp.getPort();System.out.println("接收到数据"+new String(data,0,len));System.out.println("这个数据是从"+address+"这台电脑中的"+port+"这个端口发出的");//释放资源ds.close();}
}

先运行接收端,再运行发送端 

UDP的三种通信方式(代码实现)

单播

  • 之前的代码就是单播

组播

  • 组播地址:224.0.0.0~239.255.255.255
  • 其中224.0.0.0~224.0.0.255 为预留的组播地址

三个接收端: 

package UDPDemo2;import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;public class ReceiveMessageDemo3 {public static void main(String[] args) throws IOException {MulticastSocket ms=new MulticastSocket(10000);//将当前本机,添加到224.0.0.1的这一组当中InetAddress address=InetAddress.getByName("224.0.0.1");ms.joinGroup(address);//接收数据包byte[] bytes=new byte[1024];DatagramPacket dp=new DatagramPacket(bytes,bytes.length);ms.receive(dp);//解析数据包byte[] data=dp.getData();int len=dp.getLength();int port=dp.getPort();System.out.println("这个数据是从"+address+"这台电脑中的"+port+"这个端口发出的,发出的数据为"+new String(data,0,len));//释放资源ms.close();}
}

 发送端

package UDPDemo2;import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;public class SendMessageDemo {public static void main(String[] args) throws IOException {MulticastSocket ms=new MulticastSocket();//打包数据String str="hello world";byte[] bytes=str.getBytes();InetAddress address=InetAddress.getByName("224.0.0.1");int port=10000;//数据打包DatagramPacket dp=new DatagramPacket(bytes,bytes.length,address,port);//发送数据ms.send(dp);//释放资源ms.close();}
}

 

广播 

  • 广播地址:255.255.255.255 
package UDPDemo;import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;public class SendMessageDemo {public static void main(String[] args) throws IOException {//发送数据//创建Datagramsocket对象//绑定端口,以后我们就是通过这个端口往外发送// 空参:所有可用的端口中随机一个进行使用// 有参:指定端口号进行绑定DatagramSocket ds=new DatagramSocket();//打包数据String str="hello world";byte[] bytes=str.getBytes();InetAddress address=InetAddress.getByName("255.255.255.255");int port=10086;//数据打包DatagramPacket dp=new DatagramPacket(bytes,bytes.length,address,port);//发送数据ds.send(dp);//释放资源ds.close();}
}

 

TCP协议

传输控制协议TCP(Transmission Control Protocol)

TCP协议是面向连接的通信协议。

速度慢,没有大小限制,数据安全。

TCP通信程序

TCP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket对象通信之前要保证连接已经建立
通过Socket产生I0流来进行网络通信

客户端

  • 创建客户端的Socket对象(Socket)与指定服务端连接   Socket(string host,int port)
  • 获取输出流,写数据   Outputstream getoutputstream()
  • 释放资源
package TCPDemo;import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;public class Client {public static void main(String[] args) throws IOException {//创建Socket对象// 在创建对象的同时会连接服务端,如果连接不上,代码会报错Socket socket=new Socket("127.0.0.1",10001);//可以从连接通道中获取输出流OutputStream os=socket.getOutputStream();//写出数据os.write("你好你好".getBytes());//释放资源os.close();socket.close();}
}

 服务器

  • 创建服务器端的Socket对象(ServerSocket)        ServerSocket(int port)
  • 监听客户端连接,返回一个Socket对象   Socket accept()
  • 获取输入流,读数据,并把数据显示在控制台   InputStream getInputstream()
  • 释放资源    void close()
package TCPDemo;import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;public class Server {public static void main(String[] args) throws IOException {//创建对象ServerSockerServerSocket ss=new ServerSocket(10001);//监听客户端的链接Socket socket=ss.accept();//从连接通道中获取输入流读取数据InputStream is=socket.getInputStream();InputStreamReader isr=new InputStreamReader(is);int b;while ((b=isr.read())!=-1){System.out.println((char)b);}//释放资源socket.close();ss.close();}
}

三次握手和四次挥手 

三次握手(Three-way Handshake)和四次挥手(Four-way Fin-Wait-RST)是TCP协议中建立和终止连接的过程。

1. 三次握手

三次握手是指在TCP连接建立过程中,客户端和服务器端需要进行三次报文交换,以确保双方的发送和接收能力都正常。具体过程如下:

a) 客户端向服务器端发送一个带有SYN标志的报文,表示请求建立连接。

b) 服务器端收到客户端的SYN报文后,会回复一个带有SYN和ACK标志的报文,表示同意建立连接。

c) 客户端收到服务器端的SYN+ACK报文后,会回复一个带有ACK标志的报文,表示连接已建立。

2. 四次挥手

四次挥手是指在TCP连接终止过程中,客户端和服务器端需要进行四次报文交换,以确保双方的数据都已经被对方接收并处理完毕。具体过程如下:

a) 客户端向服务器端发送一个带有FIN标志的报文,表示请求终止连接。

b) 服务器端收到客户端的FIN报文后,会回复一个带有ACK标志的报文,表示已经收到了客户端的终止请求。

c) 服务器端在处理完所有数据后,向客户端发送一个带有FIN标志的报文,表示同意终止连接。

d) 客户端收到服务器端的FIN报文后,会回复一个带有ACK标志的报文,表示连接已终止。

练习 

1、客户端:多次发送数据
服务器:接收多次接收数据,并打印

客户端

package Test1;import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;public class Client {public static void main(String[] args) throws IOException {Socket socket=new Socket("127.0.0.1",10001);Scanner sc=new Scanner(System.in);OutputStream os=socket.getOutputStream();while (true){System.out.println("请输入数据");String str=sc.nextLine();//退出方法if("886".equals(str)){break;}//写出数据os.write(str.getBytes());}//释放资源}
}

 服务器

package Test1;import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;public class Server {public static void main(String[] args) throws IOException {ServerSocket ss=new ServerSocket(10001);//等待客户端来连接Socket socket = ss.accept();//读取数据InputStream is=socket.getInputStream();InputStreamReader isr=new InputStreamReader(is);int b;while ((b=isr.read())!=-1){System.out.print((char) b);}//释放资源socket.close();ss.close();}
}

2、客户端:发送一条数据,接收服务端反馈的消息并打印

服务器:接收数据并打印,再给客户端反馈消息

客户端

package Test2;import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;public class Client {public static void main(String[] args) throws IOException {Socket socket=new Socket("127.0.0.1",10001);//写出数据String str="你好呀";OutputStream os = socket.getOutputStream();os.write(str.getBytes());//写出结束标记socket.shutdownOutput();//接收服务端的回写数据InputStream is=socket.getInputStream();InputStreamReader isr=new InputStreamReader(is);int b;while ((b=isr.read())!=-1){System.out.print((char) b);}//释放资源socket.close();}
}

服务端

package Test2;import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;public class Server {public static void main(String[] args) throws IOException {ServerSocket ss=new ServerSocket(10001);//等待客户端链接Socket socket = ss.accept();//从socket中获取输入流读取数据InputStream is = socket.getInputStream();InputStreamReader isr=new InputStreamReader(is);int b;while ((b=isr.read())!=-1){System.out.print((char)b);}//回写数据String str="hello";OutputStream os = socket.getOutputStream();os.write(str.getBytes());//释放资源socket.close();ss.close();}
}

3、客户端:将本地文件上传到服务器。接收服务器的反馈。
服务器:接收客户端上传的文件,上传完毕之后给出反馈。

客户端

package Test3;import java.io.*;
import java.net.Socket;public class Client {public static void main(String[] args) throws IOException {Socket socket=new Socket("127.0.0.1",10001);//读取本地文件中的数据,并写到服务器当中BufferedInputStream bis=new BufferedInputStream(new FileInputStream("E:\\java\\net\\clientdir\\a.jpg"));BufferedOutputStream bos=new BufferedOutputStream(socket.getOutputStream());byte[] bytes=new byte[1024];int len;while ((len=bis.read(bytes))!=-1){bos.write(bytes,0,len);}bos.flush();//往服务器写出的结束标记socket.shutdownOutput();//接收服务器的回写数据BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));String line = br.readLine();System.out.println(line);//释放资源socket.close();}
}

 服务端

package Test3;import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;public class Server {public static void main(String[] args) throws IOException {ServerSocket ss=new ServerSocket(10001);//等待客户端链接Socket socket = ss.accept();//读取数据并保存到本地文件中BufferedInputStream bis=new BufferedInputStream(socket.getInputStream());BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("E:\\java\\net\\serverdir\\a.jpg"));int len;byte[] bytes=new byte[1024];while ((len=bis.read())!=-1){bos.write(bytes,0,len);}bos.flush();//回写数据BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));bw.write("上传成功");bw.newLine();bw.flush();//释放资源socket.close();ss.close();}
}

这一期就到这里啦

努力遇见更好的自己!!!

相关文章:

网络编程(TCP协议,UDP协议)

目录 网络编程三要素 IP IPv4 InetAddress类 端口号 协议 UDP协议 UDP协议发送数据 UDP协议接收数据 UDP的三种通信方式(代码实现) TCP协议 TCP通信程序 三次握手和四次挥手 练习 1、客户端:多次发送数据服务器:接收多次接收数据,并打印 2、客户端…...

读取Jar包下文件资源的问题及解决方案

问题 项目A代码调用到Resouces下的文件a.sh,打包成Jar包后,项目B调用对应方法时,出现报错,找不到a.sh文件路径,原来的代码可能是: URL resource getClass().getClassLoader().getResource("a.sh&qu…...

C++ 反转一个二进制串

描述 一个32位有符号整数,用二进制编码来表示。现需要将该二进制编码按位反转,计算出反转后的值。 示例1 输入: 1 返回值: -2147483648 说明: 00000000 00000000 00000000 00000001 翻转后为 10000000 000000…...

黑神话悟空-吉吉国王版本【抢先版】

在中国的游戏市场中,一款名为“黑神话悟空”的游戏引起了广泛的关注。这款游戏以中国传统的神话故事“西游记”为背景,创造了一个令人震撼的虚拟世界。今天,我们要来介绍的是这款游戏的一种特殊版本,那就是吉吉国王版本。 在吉吉国…...

【尚庭公寓SpringBoot + Vue 项目实战】预约看房与租约管理(完结)

【尚庭公寓SpringBoot Vue 项目实战】预约看房与租约管理(完结) 文章目录 【尚庭公寓SpringBoot Vue 项目实战】预约看房与租约管理(完结)1、业务说明2、接口开发2.1、预约看房管理2.1.1.保存或更新看房预约2.1.2. 查询个人预约…...

java拼图小游戏项目

创建一个Java拼图小游戏是一个有趣且富有教育意义的项目,可以锻炼你的编程技能。以下是开发一个基本拼图游戏可能需要考虑的几个步骤: 项目规划: 确定游戏的基本规则和玩法。设计游戏的界面和用户交互。 环境搭建: 确保你的开发环…...

[C++][数据结构][跳表]详细讲解

目录 0.什么是跳表?1.SkipList的优化思路2.SkipList的效率如何保证?3.SkipList实现4.SkipList VS 平衡搜索树 && Hash 0.什么是跳表? SkipList本质上也是一种查找结构,用于解决算法中的查找问题,跟平衡搜索树…...

tinyxml

github下载相关的软件包,其中有四个文件需要主要需要关注就是分别是tinyxml12.cpp,tinyxml12.h,rss网页xml文件,还有就是官方给的test文件tinyxmltest.cpp。 example1就是提供一个打开文件的方式 int example_1() {XMLDocument …...

Docker(三)-Docker常用命令

1.run run命令执行流程:2.帮助启动类命令 2.1 启动docker systemctl start docker2.2 停止docker systemctl stop docker2.3 重启docker systemctl restart docker2.4查看docker状态 systemctl status docker2.5开机启动 systemctl enable docker2.6查看docker概要信息 …...

[MRCTF2020]PixelShooter

一个apk文件 jeb打开发现是apk文件 apk游戏逆向必须知道的知识: 一般关键数据在 Assets/bin/data/managed/assembly-csharp.dll这个文件里面 我不知道jeb为什么这里我没有 apk是个压缩包 直接解压 这个文件解压也可以发现flag {Unity_1S_Fun_233}...

vue实现的商品列表网页

一、商品列表效果如下 二、代码&#xff1b; vue实现的商品列表网页 &#xff0c; 图片在vue项目的Public文件夹里的 imgs中 <template><div class"common-layout"><!-- el-container:外层容器。 当子元素中包含 <el-header> 或 <el-foo…...

【泛微系统】e-cology非标配功能概览

关于泛微非标功能的功能编号、功能名称及支持版本 编号名称支持版本001考勤功能4.500.0124-9.00+KB900190206002短信通用接口5.000.0327+KB50001003 及以上版本004计划任务接口5.0+KB50001003及以上版本005集成登录接口6.0及以上版本006流程中自定义浏览框5.0+KB50001003及以上…...

Python基础教程(二十八):pip模块

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…...

通信系统概述

1.定义 通信系统&#xff08;也称为通信网络&#xff09;是利用各种通信线路将地理上分散的、具有独立功能的计算机系统和通信设备按不同的形式连接起来&#xff0c;依靠网络软件及通信协议实现资源共享和信息传递的系统。 2.概述 随着通信技术和网络技术的不断发展&#xff…...

http发展史(http0.9、http1.0、http1.1、http/2、http/3)详解

文章目录 HTTP/0.9HTTP/1.0HTTP/1.1队头阻塞&#xff08;Head-of-Line Blocking&#xff09;1. TCP 层的队头阻塞2. HTTP/1.1 的队头阻塞 HTTP/2HTTP/3 HTTP/0.9 发布时间&#xff1a;1991年 特点&#xff1a; 只支持 GET 方法没有 HTTP 头部响应中只有 HTML 内容&#xff0…...

Hadoop 面试题(四)

1. 简述Hadoop节点的动态上线下线的大概操作 &#xff1f; 在Hadoop集群中&#xff0c;节点的动态上下线指的是在不停止整个集群服务的情况下&#xff0c;添加或移除节点。这种能力对于维护和扩展集群非常重要。以下是Hadoop节点动态上线下线的大概操作步骤&#xff1a; 动态…...

绽放光彩的小程序 UI 风格

绽放光彩的小程序 UI 风格...

电脑文件夹怎么加密?文件夹加密的5种方法

在数字化时代&#xff0c;信息安全显得尤为重要。对于个人电脑用户来说&#xff0c;文件夹加密是一种有效保护隐私和数据安全的方法。本文将介绍五种文件夹加密的方法&#xff0c;帮助您更好地保护自己的重要文件。 如何设置文件夹密码方法一&#xff1a;利用Windows系统自带的…...

异步复位同步释放

目录 描述 输入描述&#xff1a; 输出描述&#xff1a; 参考代码 描述 题目描述&#xff1a; 请使用异步复位同步释放来将输入数据a存储到寄存器中&#xff0c;并画图说明异步复位同步释放的机制原理 信号示意图&#xff1a; clk为时钟 rst_n为低电平复位 d信号输入…...

JupyterLab使用指南(七):JupyterLab使用 LaTeX 生成数学公式

在 JupyterLab 中&#xff0c;可以使用 LaTeX 语法生成复杂的数学公式。JupyterLab 内置对 LaTeX 的支持&#xff0c;使得我们可以方便地在 notebook 中编写和展示数学公式。以下是详细的步骤和示例。 1. 使用 LaTeX 生成数学公式 LaTeX 是一种专门用于排版数学公式的语言。J…...

docker 环境部署

1.Redis部署 用docker拉取redis镜像 docker pull redis 用docker查看拉取的镜像版本号&#xff0c;这里查到的是 6.2.6 版本 docker inspect redis 通过wget指令下载对应版本的tar包&#xff0c;下载完成后解压 wget https://download.redis.io/releases/redis-6.2.6.tar.gz …...

Spring中的ContextPath总结

Spring中的ContextPath总结 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 1. ContextPath的概念 在Spring中&#xff0c;ContextPath是指Web应用程序的上下文…...

C++设计模式——Composite组合模式

一&#xff0c;组合模式简介 真实世界中&#xff0c;像企业组织、文档、图形软件界面等案例&#xff0c;它们在结构上都是分层次的。将系统分层次的方式使得统一管理和添加不同子模块变得容易&#xff0c;在软件开发中&#xff0c;组合模式的设计思想和它们类似。 组合模式是…...

Android提供的LruCache类简介(1)

* If your cached values hold resources that need to be explicitly released, * override {link #entryRemoved}. * 如果你cache的某个值需要明确释放&#xff0c;重写entryRemoved() * If a cache miss should be computed on demand for the corresponding keys, * ov…...

【分布式系列】分布式锁timeout了怎么办?

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

System.getProperty()方法总结

System.getProperty()方法总结 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;System.getProperty()方法是Java中用于获取系统属性的方法之一。它允许我们访问J…...

大型语言模型在AMD GPU上的推理优化

Large language model inference optimizations on AMD GPUs — ROCm Blogs 大型语言模型&#xff08;LLMs&#xff09;已经改变了自然语言处理和理解&#xff0c;促进了在多个领域中的众多人工智能应用。LLMs在包括AI助手、聊天机器人、编程、游戏、学习、搜索和推荐系统在内的…...

Apple - Core Foundation Design Concepts

本文翻译整理自&#xff1a;Core Foundation Design Concepts&#xff08;更新日期&#xff1a;2013-12-16 https://developer.apple.com/library/archive/documentation/CoreFoundation/Conceptual/CFDesignConcepts/CFDesignConcepts.html#//apple_ref/doc/uid/10000122i 文章…...

lua中的lfs库介绍

lua中的lfs库介绍 说明常用函数解析lfs.attributeslfs.chdirlfs.currentdirlfs.dirlfs.mkdirlfs.rmdirlfs.locklfs.touchlfs.linklfs.setmodelfs.symlinkattributes 说明 lfs是lua中的一个文件系统库&#xff0c;提供了更多高级的文件和目录操作功能&#xff0c;使得lua可以更方…...

PyCharm 快捷键积累

1、快速格式化&#xff1a;Ctrl Alt L Ctrl Alt L 快捷键在 PyCharm 中是用于格式化代码的&#xff0c;它不仅仅适用于 HTML 代码&#xff0c;而是适用于多种编程和标记语言。...

炫彩发光字制作网站/广东网站se0优化公司

最近一直找java8相关新特性的文章&#xff0c;发现都太没有一个连贯性&#xff0c;毕竟大家写博客肯定都有自己的侧重点&#xff0c;这里找到一本书&#xff0c;专门介绍java8新特性的&#xff0c;感觉大家可以看看《写给大忙人看的JavaSE8》.这里我会结合书中的知识以及网上的…...

中卫网站设计在哪里/营销策划的重要性

uiwebview加载中文URL _paperGamePath [_paperGamePath stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSLog("paper game path is: %", _paperGamePath);转载于:https://www.cnblogs.com/xiangjune/p/5189160.html...

做门户网站起什么域名好/网站seo优化工具

本文研究全球与中国市场包装用铝盖的发展现状及未来发展趋势&#xff0c;分别从生产和消费的角度分析包装用铝盖的主要生产地区、主要消费地区以及主要的生产商。重点分析全球与中国市场的主要厂商产品特点、产品规格、不同规格产品的价格、产量、产值及全球和中国市场主要生产…...

一般上什么网站/百度手机点击排名工具

简单来说&#xff0c;除去使用if-else实现外&#xff0c;自然就是使用table表来实现了&#xff0c;具体看代码&#xff1a; function switch(a)-- bodylocal switchNum {[1] function() -- for case 1print("Case 1.")end,[2] function() -- for case 2pri…...

wordpress置顶文章/上海谷歌优化

情况一&#xff1a;ng-click 和ng-if 一起使用 情况二&#xff1a;AngularJS中动态添加的ng-click 失效 正常情况&#xff08;即非动态插入 DOM 对象&#xff09;下&#xff0c;ng-click 这样的指令之所以有效&#xff08;即点击之后能调用注册在可见作用域里的方法&#xff09…...

青岛移动公司网站/工具站seo

早晨起床时间&#xff1a;7:00 晚上休息时间&#xff1a;22:55 全天处理事件&#xff1a;1.面试。2.出去游玩。 处事经验总结&#xff1a;暂无。 人生感悟&#xff1a;暂无。 其它&#xff1a;暂无。...