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

Java网络编程干货

1.网络编程是什么 了解                            
    
        在Java语言中,我们可以使用java.net包下的技术轻松开发出常见的网络应用程序,从而把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大、功能强的网络系统,
        从而使众多的计算机可以方便地互相传递信息、共享硬件、软件、数据信息等资源。
        
        想要实现网络互联的不同计算机上运行的程序间可以进行数据交换,那么就要涉及到网络编程的“三要素”,这样就能解决以下的三个问题:
        1. 如何准确地定位网络上一台或多台主机IP地址
        2. 如何定位到主机上某个特定的应用端口号
        3. 找到主机后如何可靠高效地进行数据传输通讯协议
    2.网络编程三要素 理解
        2.1 IP地址
        要想让网络中的计算机能够互相通信,必须为每台计算机指定一个标识号,通过这个标识号来指定要接收数据的计算机和识别发送的计算机,而IP地址就是这个标识号。
        也就是设备的标识,简单说就是设备在网络中的地址,是唯一的标识。
        
        目前,IP地址广泛使用的版本是IPv4,它是由4个字节大小的二进制数来表示,例如:0000-1010 0000-0000 0000-0000 0000-0001。
        由于二进制形式表示的IP地址非常不便记忆和处理,因此通常会将IP地址写成十进制的形式,每个字节(8位)用一个十进制整数来(0-255)表示,数字间用符号“.”分开,如“192.168.0.1”。
        因为8位对应的十进制无符号整数为:0-255,所以-4.278.4.1是错误的IPv4地址。
        
        随着计算机网络规模的不断扩大,对IP地址的需求也越来越多,IPv4这种用4个字节表示的IP地址面临枯竭,因此IPv6便应运而生了,IPv6使用16个字节表示IP地址,它所拥有的地址容量达到2128 个(算上全零的),这样就解决了网络地址资源数量不够的问题。16个字节写成8个16位的无符号整数,每个整数用四个十六进制位表示,每个数之间用冒号分开,如:3ffe:3201:1401:1280:c8ff:fe4d:db39:1984。
        注意事项:
        1. 本机地址:127.0.0.1,主机名:localhost。
        2. 192.168.0.0--192.168.255.255为私有地址,属于非注册地址,专门为组织机构内部使用。
            2.1.1 域名和DNS
                2.1.1.1 域名
                    IP地址毕竟是数字标识,使用时不好记忆和书写,因此在IP地址的基础上又发展出一种符号化的地址方案,来代替数字型的IP地址。
                    每一个符号化的地址都与特定的IP地址对应。这个与网络上的数字型IP地址相对应的字符型地址,就被称为域名。
                    目前域名已经成为互联网品牌、网上商标保护必备的要素之一,除了识别功能外,还有引导、宣传等作用。如:www.baidu.com。
                2.1.1.2 DNS
                    在Internet上域名与IP地址之间是一对一(或者多对一)的,域名虽然便于人们记忆,但机器之间只能互相认识IP地址,它们之间的转换工作称为域名解析,
                    域名解析需要由专门的域名解析服务器来完成,DNS(Domain Name System域名系统)就是进行域名解析的服务器,域名的最终指向是IP。
        2.2 端口号
            IP地址用来标识一台计算机,但是一台计算机上可能提供多种网络应用程序,如何来区分这些不同的程序呢这就要用到端口。
            在计算机中,不同的应用程序是通过端口号区分的。端口号是用两个字节(无符号)表示的,它的取值范围是0~65535,而这些计算机端口可分为3大类:
            公认端口:0~1023。被预先定义的服务通信占用(如:HTTP占用端口80,FTP占用端口21,Telnet占用端口23等)
            注册端口:1024~49151。分配给用户进程或应用程序。(如:Tomcat占用端口8080,MySQL占用端口3306,Oracle占用端口1521等)。
            动态/私有端口:49152~65535。
            IP地址好比每个人的地址(门牌号),端口好比是房间号。必须同时指定IP地址和端口号才能够正确的发送数据。接下来通过一个图例来描述IP地址和端口号的作用,如下图所示

        2.3 通讯协议
            通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则。
            就像两个人想要顺利沟通就必须使用同一种语言一样,如果一个人只懂英语而另外一个人只懂中文,这样就会造成没有共同语言而无法沟通。
            在计算机网络中,这些连接和通信的规则被称为网络通信协议,它对数据的传输格式、传输速率、传输步骤等做了统一规定,通信双方必须同时遵守才能完成数据交换。
            2.3.1 OSI参考模型
                世界上第一个网络体系结构由IBM公司提出(1974年,SNA),以后其他公司也相继提出自己的网络体系结构如:Digital公司的DNA,美国国防部的TCP/IP等,
                多种网络体系结构并存,其结果是若采用IBM的结构,只能选用IBM的产品,只能与同种结构的网络互联。
                
                为了促进计算机网络的发展,国际标准化组织ISO(International Organization for Standardization)于1977年成立了一个委员会,
                在现有网络的基础上,提出了不基于具体机型、操作系统或公司的网络体系结构,
                称为开放系统互连参考模型,即OSI/RM (Open System Interconnection Reference Model)。
                OSI模型把网络通信的工作分为7层,分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。OSI七层协议模型中约定了不同主机之间每层的数据传输协议。

            2.3.2 TCP/IP参考模型
                OSI参考模型的初衷是提供全世界范围的计算机网络都要遵循的统一标准,但是由于存在模型和协议自身的缺陷,迟迟没有成熟的产品推出。
                TCP/IP协议在实践中不断完善和发展取得成功,作为网络的基础,Internet的语言,可以说没有TCP/IP协议就没有互联网的今天。
                TCP/IP,即Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,是Internet最基本的协议、Internet国际互联网络的基础。
                
                TCP/IP协议是一个开放的网络协议簇,它的名字主要取自最重要的网络层IP协议和传输层TCP协议。TCP/IP协议定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。
                TCP/IP参考模型采用4层的层级结构,每一层都呼叫它的下一层所提供的协议来完成自己的需求,这4个层次分别是:网络接口层、互联网层(IP层)、传输层(TCP层)、应用层。
                OSI模型与TCP/IP模型的对应关系如图所示:
                    OSI模型中的应用层、表示层、会话层对应TCP/IP协议的应用层
                    OSI模型中的传输层对应TCP/IP协议的传输层(TCP/UDP)
                    OSI模型中的网络层对应TCP/IP协议的网络层(IP)
                    OSI模型中的数据链路层、物理层对应TCP/IP协议的物理+数据链路层
                
                那么TCP/IP协议和OSI模型有什么区别呢?
                OSI网络通信协议模型,是一个参考模型,而TCP/IP协议是事实上的标准。TCP/IP协议参考了OSI 模型,但是并没有严格按照OSI规定的七层标准去划分,
                而只划分了四层,这样会更简单点,当划分太多层次时,你很难区分某个协议是属于哪个层次的。
                
                TCP/IP协议和OSI模型也并不冲突,TCP/IP协议中的应用层协议,就对应于OSI中的应用层,表示层,会话层。
                TCP/IP中有两个重要的协议,传输层的TCP协议和互连网络层的IP协议,因此就拿这两个协议做代表,来命名整个协议族了,再说TCP/IP协议时,是指整个协议族。
    3.网络编程基础类 掌握
        3.1 InetAddress类
        java.net.InetAddress用来封装计算机的ip地址及DNS(没有端口信息),包括一个主机名和一个URL地址,是java对ip地址的高层展示。
        大多数类都用到这个类,包括Socket、ServerSocket、URL、DatagramSocket、DatagramPocket
    
            3.1.1 常用静态方法 
                InetAddress getByName(String host); --传入主机名或ip地址得到对应的InetAddress对象,其中封装了ip地址和主机名
                InetAddress getLocalHost(); --获取本机的InetAddress对象,其中封装ip地址和主机名
            3.1.2 常用成员方法
                String getHostAddress(); --获取ip地址
                String getHostName(); --获取主机名
        3.2 URL类
        java.net.URL是统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。
        互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。
        URL由4部分组成:协议、存放资源的主机域名、资源文件名和端口号。如果未指定该端口号,则使用协议默认的端口。
        例如HTTP协议的默认端口为80。在浏览器中访问网页时,地址栏显示的地址就是URL。
        URL标准格式为:<协议>://<域名或IP>:<端口>/<路径>。其中,<协议>://<域名或IP>是必需的,<端口>/<路径>有时可省略。如:https://www.baidu.com。
        为了方便程序员编程,JDK中提供了URL类,该类的全名是java.net.URL,该类封装了大量复杂的涉及从远程站点获取信息的细节,可以使用它的各种方法来对URL对象进行分割、合并等处理。
        
        创建方式:new URL(String path);
        获取协议方法:getProtlcol();
        获取域名:getHost();
        获取与URL关联协议的默认端口:getDefaultPort();
        获取端口:getPort();
        获取端口号后,参数前的内容:getPath();
        获取端口号后所有的内容:getFile();
        获取参数:getQuery();
        获取锚点:getRef(); --输出"#"后面的内容
        
        使用此类的InputStream openStream()方法,可打开此URL的一个链接,并返回一个用于从该连接读入的InputStream,实现简单的网络读取。
    
    4.TCP和UDP协议   理解
        4.1 Socket套接字概述
            我们开发的网络应用程序位于应用层,TCP和UDP属于传输层协议,在应用层如何使用传输层的服务呢在应用层和传输层之间,则是使用套接Socket来进行分离。
            
            套接字就像是传输层为应用层开的一个小口,应用程序通过这个小口向远程发送数据,或者接收远程发来的数据。
            而这个小口以内,也就是数据进入这个口之后,或者数据从这个口出来之前,是不知道也不需要知道的,也不会关心它如何传输,这属于网络其它层次工作。
            
            Socket实际是传输层供给应用层的编程接口。Socket就是应用层与传输层之间的桥梁。
            使用Socket编程可以开发客户机和服务器应用程序,可以在本地网络上进行通信,也可通过Internet在全球范围内通信。
            
            应用层-(Socket)-传输层-网络层-数据链路层-物理层
        4.2 TCP协议和UDP协议
            TCP协议和UDP协议是传输层的两种协议。Socket是传输层供给应用层的编程接口,所以Socket编程就分为TCP编程和UDP编程两类
            4.2.1 TCP协议
                使用TCP协议,须先建立TCP连接,形成传输数据通道,似于拨打电话
                传输前,采用“三次握手”方式,属于点对点通信,是面向连接的,效率低。
                仅支持单播传输,每条TCP传输连接只能有两个端点(客户端、服务端)。
                两个端点的数据传输,采用的是“字节流”来传输,属于可靠的数据传输。
                传输完毕,需释放已建立的连接,开销大,速度慢,适用于文件传输、邮件等。
            4.2.2 UDP协议
                采用数据报(数据、源、目的)的方式来传输,无需建立连接,类似于发短信。
                每个数据报的大小限制在64K内,超出64k可以分为多个数据报来发送。
                发送不管对方是否准备好,接收方即使收到也不确认,因此属于不可靠的。
                可以广播发送,也就是属于一对一、一对多和多对一连接的通信协议。
                发送数据结束时无需释放资源,开销小,速度快,适用于视频会议、直播等。
            4.2.3 TCP协议和UDP协议的区别
                是否连接:TCP面向连接,UDP面向非连接
                传递可靠性:TCP可靠,UDP不可靠
                连接对象个数:TCP(一对一),UCP(一对一,一对多,多对一)
                传输方式:TCP面向字节流,UDP面向报文
                传输速度:TCP慢,UDP快
                应用场景:TCP适用于可靠传输(文件传输,邮件等);UDP适用于实时应用(视频会议,直播等)
        4.3 三次握手和四次回收
            客户端与服务端在使用TCP传输协议时要先建立一个“通道”,在传输完毕之后又要关闭这“通道”,前者可以被形象地成为“三次握手”,而后者则可以被称为“四次挥手”。
            通道的建立之三次握手:
            1. 在建立通道时,客户端首先要向服务端发送一个SYN同步信号。
            2. 服务端在接收到这个信号之后会向客户端发出SYN同步信号和ACK确认信号。
            3. 当服务端的ACK和SYN到达客户端后,客户端与服务端之间的这个“通道”就被建立。
            
            通道的关闭之四次挥手:
            1. 在数据传输完毕之后,客户端会向服务端发出一个FIN终止信号。
            2. 服务端在收到这个信号之后会向客户端发出一个ACK确认信号。
            3. 如果服务端此后也没有数据发给客户端时服务端会向客户端发送一个FIN终止信号。
            4. 客户端在收到这个信号之后会回复一个确认信号,在服务端接收到这个信号之后,服务端与客户端的通道也就关闭了。
            

    5.基于TCP协议的编程 掌握
        5.1 TCP协议编程概述
            套接字是一种进程间的数据交换机制,利用套接字(Socket)开发网络应用程序早已被广泛的采用,以至于成为事实上的标准。
            在网络通讯中,第一次主动发起通讯的程序被称作客户端(Client),而在第一次通讯中等待连接的程序被称作服务端(Server)。
            一旦通讯建立,则客户端和服务器端完全一样,没有本质的区别。
            套接字与主机地址和端口号相关联,主机地址就是客户端或服务器程序所在的主机的IP地址,端口地址是指客户端或服务器程序使用的主机的通信端口。
            在客户端和服务器中,分别创建独立的Socket,并通过Socket的属性,将两个Socket进行连接,这样客户端和服务器通过套接字所建立连接并使用IO流进行通信。
        5.2 Socket的概述
            Socket类实现客户端套接字(Client客户端),套接字是两台机器之间通信的端点
            Socket构造方法:public Socket(InetAddress ia,int p); 创建套接字并连接到指定ip地址的指定端口
            
            Socket成员方法:
                方法名                                    描述
                public InetAddress getInetAddress()        返回此套接字连接到的远程 IP 地址。
                public InputStream getInputStream()        返回此套接字的输入流(接收网络消息)。
                public OutputStream getOutputStream()    返回此套接字的输出流(发送网络消息)。
                public void shutdownInput()                禁用此套接字的输入流
                public void shutdownOutput()            禁用此套接字的输出流。
                public synchronized void close()        关闭此套接字(默认会关闭IO流)。

        5.3    ServerSocket的概述
            ServerSocket类用于实现服务器套接字(Server服务端)。服务器套接字等待请求通过网络传入。它基于该请求执行某些操作,然后可能向请求者返回结果。
            
            ServerSocket类的构造方法:
            方法名                                        描述
            public ServerSocket(int port)            创建服务器套接字并绑定端口号
            
            ServerSocket类的常用方法:
            方法名                                        描述
            public Socket accept()                    侦听要连接到此套接字并接受它。
            public InetAddress getInetAddress()        返回此服务器套接字的本地地址。
            public void close()                        关闭此套接字。
            

        5.4 TCP单项通讯的实现
            java语言的基于套接字编程分为服务端编程和客户端编程
            5.4.1 服务器端实现步骤
                创建ServerSocket对象,并绑定端口
                通过accept方法监听客户端的请求
                建立连接后,通过输入输出流进行读写操作
                调用close方法关闭资源
            5.4.2 客户端实现步骤
                创建Socket对象,指定服务区ip和端口
                建立连接后,通过输入输出流进行读写操作
                通过输出输入流获取服务器返回信息
                调用close方法关闭资源
            注意:先启动服务器端,再启动客户端
        5.5 TCP双向通讯的实现
            5.5.1 服务器端实现步骤
                1. 创建ServerSocket对象,绑定监听端口;
                2. 通过accept()方法监听客户端请求;
                3. 使用输入流接收客户端发送的图片,然后通过输出流保存图片
                4. 通过输出流返回客户端图片收到。
                5. 调用close()方法关闭资源
            5.5.2 客户端实现步骤
                1. 创建socket对象,指明需要连接的服务器地址和端口号;
                2. 建立连接后,通过输出流向服务器端发送图片;
                3. 通过输入流获取服务器的响应信息;
                4. 调用close()方法关闭资源
    
    6.基于UDP协议的编程 掌握
        6.1 UDP协议编程概述
            在UDP通信协议下,两台计算机之间进行数据交互,并不需要先建立连接,发送端直接往指定的IP和端口号上发送数据即可,
            但是它并不能保证数据一定能让对方收到,也不能确定什么时候可以送达
            
            java.net.DatagramSocket类和java.net.DatagramPacket类是使用UDP编程中需要使用的两个类,并且发送端和接收端都需要使用这个俩类,并且发送端与接收端是两个独立的运行程序。
            1. DatagramSocket:负责接收和发送数据,创建接收端时需要指定端口号。
            2. DatagramPacket:负责把数据打包,创建发送端时需指定接收端的IP地址和端口。

        6.2 DataGramSocket概述
            DatagramSocket类作为基于UDP协议的Socket,使用DatagramSocket类可以用于接收和发送数据,同时创建接收端时还需指定端口号。
            
            DatagramSocket类的构造方法:
            方法名    描述
            public DatagramSocket()    创建发送端的数据报套接字
            public DatagramSocket(int port)    创建接收端的数据报套接字,并指定端口号
            
            DatagramSocket类的常用方法:
            方法名    描述
            public void send(DatagramPacket p)    发送数据报。
            public void receive(DatagramPacket p)    接收数据报。
            public void close()    关闭数据报套接字。
        
        6.3 DatagramPacket概述
            DatagramPacket类负责把发送的数据打包(打包的数据为byte类型的数组),并且创建发送端时需指定接收端的IP地址和端口。
            
            DatagramPacket类的构造方法:
            方法名    描述
            public DatagramPacket(byte buf[], int offset, int length)    创建接收端的数据报。
            public DatagramPacket(byte buf[], int offset, int length, InetAddress address, int port)    创建发送端的数据报,并指定接收端的IP地址和端口号。
            
            DatagramPacket类的常用方法:
            方法名    描述
            public synchronized byte[] getData()    返回数据报中存储的数据
            public synchronized int getLength()    获得发送或接收数据报中的长度

        6.4 基于UDP编程的实现
            6.4.1 接收端实现步骤
                创建DatagramSocket对象(服务端),并指定端口号
                创建DatagramPacket对象(数据报)
                调用receive方法,用于接收数据报
                调用close方法关闭资源
            6.4.2 发送端实现步骤
                创建DatagramSocket对象(发送端)
                创建DatagramPacket对象(数据报),并指定接收端ip地址和接口
                调用send方法,发送数据报
                调用close方法关闭资源

相关文章:

Java网络编程干货

1.网络编程是什么 了解 在Java语言中&#xff0c;我们可以使用java.net包下的技术轻松开发出常见的网络应用程序&#xff0c;从而把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大、功能强的网络系统&#x…...

Java实现安卓手机模拟操作

文章目录 第一部分&#xff1a;安卓模拟操作基础1.1 安卓输入系统概述1.1.1 输入事件传递机制1.1.2 输入事件类型 1.2 模拟操作的核心类1.2.1 Instrumentation类1.2.2 KeyEvent类1.2.3 MotionEvent类 1.3 权限要求1.3.1 普通权限1.3.2 特殊权限 第二部分&#xff1a;基础模拟操…...

一文讲清楚PLC、运动控制卡、运动控制器

随着工业技术的发展&#xff0c;工业机器人应用越来越广泛&#xff0c;PLC也不再是简单的可编程逻辑控制器&#xff0c;各个品牌厂家都推出了自己的运动控制型PLC&#xff0c;来实现一些运动控制功能&#xff0c;与此同时&#xff0c;运动控制卡及运动控制器也在如火如荼地发展…...

蓝桥杯备战

#include<bits/stdc.h> using namespace std; int main(){ios::sync_with_stdio(false);cin.tie(0);return 0; } 输入输出加速 ios::sync_with_stdio(false) 作用&#xff1a; 禁用 C 和 C 标准流的同步&#xff0c;使 cin/cout 速度接近 scanf/printf。 适用性&#xff…...

python保留关键字详解

一、什么是保留关键字&#xff1f; 保留关键字是Python语言中具有特殊含义和功能的词汇&#xff0c;这些词汇构成了Python的语法基础。它们不可被重新定义或用作变量名、函数名等标识符&#xff0c;在代码中承担着控制程序逻辑、定义数据结构等重要职责。 二、查看保留关键字…...

NLP中的“触发器”形式

在自然语言处理&#xff08;NLP&#xff09;中&#xff0c;触发器的设计更加依赖于文本特征&#xff0c;而非视觉特征。以下是NLP中常见的触发器类型及其实现方式&#xff1a; 1. 特定词汇或短语 定义&#xff1a;在文本中插入特定的单词、短语或符号。示例&#xff1a; 罕见…...

uView修改样式(持续更新)

场景 通过样式穿透修改uView2.0组件样式&#xff0c;用于app 注意版本不一样方法可能不同 实现 通用 .uni-body{line-height: 0; }u-input ::v-deep .u-input{height: 20.51rpx !important;padding: 0 6.59rpx !important; } ::v-deep .uni-input-input{height:50%;font-s…...

使用 Datadog 和 Slack Alerts 监控 AWS EC2

监控是大多数 IT 专业人员的关键职责之一。如果您最近正在寻找新工作&#xff0c;您可能已经注意到“监控”一词几乎出现在许多组织发布的每份职位描述中。 您可以找到各种监控工具&#xff0c;它们提供一些卓越的功能来简化您的工程工作。然而&#xff0c;Datadog 是大多数组…...

grafana/loki 部署搜集 k8s 集群日志

grafana/loki 和 grafana/loki-stack 的区别 ​Grafana 提供了多个 Helm Chart 用于在 Kubernetes 集群中部署 Loki 及相关组件,其中主要包括 grafana/loki 和 grafana/loki-stack。​它们的主要区别如下:​ 1.grafana/loki Helm Chart: 专注于 Loki 部署: 该 Chart 专门…...

【ESP32S3】GATT Server service table传送数据到调试助手

前言 在初步学习esp32蓝牙的过程中&#xff0c;借鉴了官方的GATT Server Service Table Example&#xff0c;可以在readme中看到&#xff0c;此demo是采用低功耗蓝牙的通用属性服务器来创建订阅服务和特性。如果你接触过MQTT&#xff0c;你会发现GATT Server这一特性和MQTT的订…...

《Vue Router实战教程》5.嵌套路由

欢迎观看《Vue Router 实战&#xff08;第4版&#xff09;》视频课程 嵌套路由 一些应用程序的 UI 由多层嵌套的组件组成。在这种情况下&#xff0c;URL 的片段通常对应于特定的嵌套组件结构&#xff0c;例如&#xff1a; 通过 Vue Router&#xff0c;你可以使用嵌套路由配置…...

小白学习java第12天:IO流之转换流

我们可能会遇到这样情况就是&#xff1a;你在读取那个文件编码类型是GBK&#xff0c;而是进行读取的的时候使用的UTF-8&#xff0c;这就会导致乱码&#xff0c;因为你没办法保证别人是用什么类型进行编写的&#xff0c;因此我们就需要转换流进行处理这种情况&#xff01; 下面…...

BERT - 直接调用transformers.BertModel, BertTokenizerAPI不进行任何微调

本节代码将使用 transformers 库加载预训练的BERT模型和分词器&#xff08;Tokenizer&#xff09;&#xff0c;并处理文本输入。 1. 加载预训练模型和分词器 from transformers import BertTokenizer, BertModelmodel_path "/Users/azen/Desktop/llm/models/bert-base-…...

如何在 Spring Boot 项目中使用 MyBatis 进行批量操作以提升性能?

MyBatis 提供了 ExecutorType.BATCH 类型&#xff0c;允许将多个 SQL 语句进行组合&#xff0c;最后统一执行&#xff0c;从而减少数据库的访问频率&#xff0c;提升性能。 以下是如何在 Spring Boot 项目中使用 MyBatis 进行批量操作的关键点&#xff1a; 1. 配置 MyBatis 使…...

传统门店VS智慧门店:电能物联网平台在连锁行业的节能应用

前言 随着连锁零售行业门店的规模化发展&#xff0c;能源消耗成为企业成本管控与可持续发展的重要课题。在当今快节奏的商业环境中&#xff0c;连锁门店的管理和运营变得越来越具有挑战性。能源数据是连锁门店的管理中重要组成部分&#xff0c;为了提高门店的能源利用效率和管…...

[ctfshow web入门] RCE 或(or)、异或(xor)、非(not)绕过

代码 这是一个python语言的&#xff0c;使用或(or)、异或(xor)、非(not)防火墙 这将根据命令提供加密后的指令&#xff0c;用法 rce_xor(list_cmd)、rce_or(list_cmd)、rce_not(list_cmd) 用来生成加密后的指令&#xff0c;这个指令是类如下面这样的&#xff0c;这些指令可以用…...

C++ 虚函数:深入理解多态的核心机制

C 虚函数&#xff1a;深入理解多态的核心机制 在 C 里&#xff0c;虚函数是实现 多态&#xff08;Polymorphism&#xff09; 的关键机制之一。透彻理解虚函数的概念、实现方式以及使用场景&#xff0c;对编写高效且可扩展的 C 代码起着至关重要的作用。本文会详细介绍 C 虚函数…...

速盾:高防CDN节点对收录有影响吗?

引言 搜索引擎收录是网站运营中至关重要的环节&#xff0c;它直接影响着网站的曝光度和流量。近年来&#xff0c;随着网络安全威胁的增加&#xff0c;许多企业开始采用高防CDN&#xff08;内容分发网络&#xff09;来保护其网站免受DDoS攻击和其他形式的网络攻击。然而&#x…...

按规则批量修改文件扩展名、删除扩展名或添加扩展名

文件的扩展名是多种多样的&#xff0c;有些不同文件的扩展名之间相互是可以直接转换的。我们工作当中最常见的就是 doc 与 docx、xls 与 xlsx、jpg 与 jpeg、html 与 htm 等等&#xff0c;这些格式在大部分场景下都是可以相互转换 能直接兼容的。我们今天要介绍的就是如何按照一…...

在Java项目中,引入【全局异常处理器】

目录 一.为什么引入全局异常处理器&#xff08;目前项目碰到了什么问题&#xff09;&#xff1f; 1.问题描述 2.与预期的差别 3.解决方案 二.解决上述问题 1.定义【业务异常类】 2.在serviceImpl层&#xff0c;手动抛出【违反唯一性约束】这个异常 3.定义【全局异常处理…...

计算机网络-TCP协议详解

TCP协议详解 2. TCP协议详解2.1 TCP协议概述2.1.1 TCP的历史背景2.1.2 TCP的设计目标2.1.3 TCP的基本特性2.1.4 TCP与其他传输协议的比较2.1.5 TCP的应用场景 2.2 TCP头部结构2.2.1 TCP头部格式2.2.2 TCP头部字段详解源端口号和目的端口号&#xff08;各16位&#xff09;序列号…...

[蓝桥杯 2023 省 A] 平方差

P9231 [蓝桥杯 2023 省 A] 平方差 题目描述 给定 L , R L,R L,R&#xff0c;问 L ≤ x ≤ R L \leq x \leq R L≤x≤R 中有多少个数 x x x 满足存在整数 y , z y,z y,z 使得 x y 2 − z 2 xy^2-z^2 xy2−z2。 输入格式 输入一行包含两个整数 L , R L,R L,R&#xff…...

隐私通信新时代:磐石云AXB平台如何重塑企业安全防线?

在数据泄露频发的当下&#xff0c;企业如何守护用户隐私&#xff1f;磐石云AXB隐私号平台以四大技术革新&#xff0c;构建通信安全堡垒。 技术突破&#xff1a; 动态号码隔离&#xff0c;隐私0泄露 AXB模式下&#xff0c;A与B的真实号码全程隐藏&#xff0c;仅通过虚拟号X中转…...

什么是八步工作法?

八步工作法&#xff0c;顾名思义&#xff0c;就是把一项工作拆分成八个步骤来完成。它的核心目的是让工作变得更有条理&#xff0c;更高效&#xff0c;避免忙而无序&#xff0c;做到事事有着落&#xff0c;件件有结果。这个方法在很多企业和单位中都有应用&#xff0c;尤其适合…...

日事清团队协作软件:智能制定计划,实时追踪任务进展,文件共享无缝协作,知识库一键沉淀成果​

我们总是有微细目标&#xff0c;日事清可以帮助团队轻松共同制定计划、同步工作进展、共享工作资料、沉淀工作成果。 日事清具体如何帮助团队&#xff1f;你可以先了解以下这些基本功能模块。 从【计划】开始 在日事清中&#xff0c;【计划】是协同办公的开始&#xff0c;邀请…...

全球变暖(蓝桥杯 2018 年第九届省赛)

题目描述 你有一张某海域 NN 像素的照片&#xff0c;. 表示海洋、 # 表示陆地&#xff0c;如下所示&#xff1a; ....... .##.... .##.... ....##. ..####. ...###. .......其中 "上下左右" 四个方向上连在一起的一片陆地组成一座岛屿。例如上图就有 2 座岛屿。 由…...

国际物流怎么找客户?选择适合自己的企业拓客平台

在国际物流行业&#xff0c;获客一直是企业发展的核心难题。无论是跨境电商、传统外贸&#xff0c;还是国际货代&#xff0c;找到精准的客户资源并高效转化&#xff0c;是决定企业能否抢占市场蓝海的关键。今天&#xff0c;我们就来聊聊如何选择一个真正适合的国际物流拓客平台…...

驱动-内核空间和用户空间数据交换

内核空间与用户控件数据交换 前面了解的字符设备中对 file_operations 结构体的进行了填充&#xff0c; 该 结构体的每一个成员都对应着一个系统调用&#xff0c; 例如 read、 write 等&#xff0c; 在字符设备相关的文章中有实验过对 调用函数进行了标志打印&#xff0c; 并没…...

智膳优选 | AI赋能的智慧食堂管理专家 —— 基于飞书多维表格和扣子(Coze)的智能解决方案

智膳优选 | AI赋能的智慧食堂管理专家 基于飞书多维表格和扣子&#xff08;Coze&#xff09;的智能解决方案 数据驱动餐饮管理&#xff0c;让每一餐都是营养与经济的完美平衡&#xff01; “智膳优选”通过整合飞书与Coze&#xff0c;将数据智能引入校园餐饮管理&#xff0…...

FCOS目标检测

一、模型框架 FCOS采用的网络架构和RetinaNet一样&#xff0c;都是采用FPN架构&#xff0c;如图2所示&#xff0c;每个特征图后是检测器&#xff0c;检测器包含3个分支&#xff1a;classification&#xff0c;regression和center-ness。 对于特征图Fi∈RHWC&#xff0c;其相对…...

Linux中动态加载两个同名so(dlopen动态链接库)

// 当前路径下 ./test1.c int Func1(int a, int b) { return ab; } //编译生成so gcc -fPIC -shared -o libTest.so test1.c // 当前路径的test2文件夹中 ./test2/test2.c int Func1(int a, int b) { return a-b; } //编译生成同名so gcc -fPIC -shared -o …...

直播电商革命:东南亚市场的“人货场”重构方程式

一、人设经济3.0&#xff1a;从流量收割到情感基建 东南亚直播战场正经历从"叫卖式促销"到"沉浸式信任"的质变&#xff0c;新加坡市场成为最佳观察样本&#xff1a; 数据印证趋势&#xff1a;Shopee直播用户日均停留28分钟&#xff0c;超短视频平台&#…...

【CF】Day30——Codeforces Round 824 (Div. 2) C + Codeforces Round 825 (Div. 2) BC1

C. Phase Shift 题目&#xff1a; 思路&#xff1a; 好题&#xff0c;值得多看 这题我们看题目就能想到一个很显然的做法&#xff0c;那就是贪心地把每一个字母换成最前面的没使用过的字母 但是这样直接写是有问题的&#xff0c;因为题目说了最后要让所有的字母成一个换&…...

STM32 模块化开发指南 · 第 2 篇 如何编写高复用的外设驱动模块(以 UART 为例)

本文是《STM32 模块化开发实战指南》的第 2 篇,聚焦于“串口驱动模块的设计与封装”。我们将从一个最基础的裸机 UART 初始化开始,逐步实现:中断支持、环形缓冲收发、模块接口抽象与测试策略,构建一个可移植、可扩展、可复用的 UART 驱动模块。 一、模块化 UART 的设计目标…...

SSRF打靶总结

文章目录 一. PortSwigger1、本地服务器的基本SSRF2、基本的目标不是漏洞机3、Referer标头的外带SSRF4、简单黑名单的SSRF黑名单绕过思路&#xff1a; 5、重定向的SSRF6. 简单的白名单SSRF白名单绕过思路&#xff1a; 二、BWAPP1. SSRF 文件包含漏洞 | 内网探测2. XXE -> S…...

第五章:5.1 ESP32物联网应用 - MQTT协议深度教程

一、MQTT协议简介 1.1 发布/订阅模式 MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻量级物联网通信协议&#xff0c;采用发布/订阅模式&#xff1a; 发布者&#xff08;Publisher&#xff09;&#xff1a;发送消息到指定主题&#xff08;如&…...

c++知识点

高级模板技术45&#xff1a; 模板元编程&#xff1a;这是一种在编译期进行计算和代码生成的技术。通过模板的递归展开、特化等操作&#xff0c;可以实现一些复杂的功能&#xff0c;例如编译期的计算、类型安全的容器等。例如&#xff0c;使用模板元编程可以实现一个编译期计算斐…...

【ChCore Lab 01】Bomb Lab 拆炸弹实验(ARM汇编逆向工程)

文章目录 1. 前言2. 实验代码版本问题3. 关于使用问题4. 宏观分析5. read_line 函数介绍6. phase_0 函数6.1. read_int 函数6.2. 回到 phase_0 函数继续分析6.3. 验证结果 7. phase_1 函数7.2. 验证结果 8. phase_2 函数8.1. read_8_numbers 函数8.2. 回到 phase_2 函数继续分析…...

QStackedWidget讲解

简介 QStackedWidget 类在一次仅显示1个窗口的地方提供一个窗口栈。 头文件:#include qmake:QT widgets 基类:QFrame 属性 count : const int currentIndex : int 公有槽函数 void setCurrentIndex(int index) void setCurrentWidget(QWidget *widget)信号 void current…...

宝马集团加速 ERP 转型和上云之旅

宝马集团&#xff08;BMW Group&#xff09;作为全球领先的豪华汽车和摩托车制造商&#xff0c;致力于构建更加智能、绿色、人性化的出行体验。为了支持其全球化、数字化业务战略&#xff0c;宝马集团正在进行大规模的 IT 体系升级和 ERP 云转型。该项目以“RISE with SAP S/4H…...

AutoEval:现实世界中通才机器人操作策略的自主评估

25年3月来自 UC Berkeley 和 Nvidia 的论文“AutoEval: Autonomous Evaluation of Generalist Robot Manipulation Policies in the Real World”。 可规模化且可复现的策略评估一直是机器人学习领域长期存在的挑战。评估对于评估进展和构建更优策略至关重要&#xff0c;但在现…...

ARM Cortex M内存屏障指令__dsb( )和__isb( )

ARM Cortex-M 系列处理器中的 __dsb() 和 __isb() 是内存屏障指令&#xff0c;用于确保内存操作的顺序性和可见性&#xff0c;尤其在涉及外设、多核/多线程、自修改代码或关键系统配置时至关重要。 一&#xff0c;详细说明和典型应用场景 1. __dsb()&#xff08;Data Synchron…...

deepseek热度已过?

DeepSeek的热度并没有消退&#xff0c;以下是具体表现&#xff1a; 用户使用量和下载量方面 • 日活跃用户量增长&#xff1a;DeepSeek已经成为目前最快突破3000万日活跃用户量的应用程序。 • 应用商店下载量&#xff1a;1月26日&#xff0c;DeepSeek最新推出的AI聊天机器人…...

使用 Datadog 和 Slack Alerts 监控 minikube

为什么要监控 minikube 集群&#xff1f;这是一个不错的练习&#xff0c;可以让你了解 DataDog 的设置过程并探索 K8s 指标产品。 本文将分享我的以下经验&#xff1a; 设置最新的 minikube部署示例应用程序创建 DataDog&#xff08;试用&#xff09;帐户使用 Helm 安装 Data…...

深入 Redis 持久化:从原理到企业级应用的全景图

&#x1f9e0; 什么是 Redis 持久化&#xff1f;为什么需要&#xff1f; Redis 是内存型数据库&#xff0c;默认所有数据都存在内存中&#xff0c;一旦断电&#xff0c;数据就会消失。为了避免重要数据丢失&#xff0c;Redis 提供了持久化机制&#xff0c;用于将内存中的数据保…...

NET模式下如何配置虚拟机的IP地址为静态的

1.查看网关&#xff1a; 2.找到虚拟机的网络配置文件 cd ./etc/sysconfig/network-scripts/ vim ifcfg-ens33 3.修改配置 BROWSER_ONLY"no" IPADDR192.168.122.120 NETMASK255.255.255.0 GATEWAY192.168.122.2 DNS18.8.8.8 4.重启网路服务 sudo systemctl rest…...

VMWare Workstation Pro17.6最新版虚拟机详细安装教程(附安装包教程)

目录 前言 一、VMWare虚拟机下载 二、VMWare虚拟机安装 三、运行虚拟机 前言 VMware 是全球领先的虚拟化技术与云计算解决方案提供商&#xff0c;通过软件模拟计算机硬件环境&#xff0c;允许用户在一台物理设备上运行多个独立的虚拟操作系统或应用。其核心技术可提升硬件…...

磐石云智能语音客服系统——技术革新引领服务新体验

在人工智能技术飞速发展的今天&#xff0c;企业对于智能化客户服务的需求日益增长。磐石云智能语音客服系统凭借其前沿技术架构与深度场景适配能力&#xff0c;正在重新定义人机交互的边界。本文将深入解析该系统如何通过技术创新实现服务效率与体验的双重突破。 一、意图识别…...

什么是iPaaS?

在当今数字化时代&#xff0c;企业面临着日益复杂的IT环境和不断增长的业务需求。随着云计算、微服务、物联网等技术的快速发展&#xff0c;企业需要更加高效、灵活且安全的方式来进行数据集成和应用集成。集成平台即服务&#xff08;iPaaS&#xff09;应运而生&#xff0c;成为…...

Vue3 中 Pinia 持久化的全面解析和最佳实践

Vue3 中 Pinia 持久化的全面解析 一、Pinia 简介​ Pinia 是 Vue 的新一代状态管理库&#xff0c;它提供了简洁的 API&#xff0c;支持 Composition API&#xff0c;并且拥有良好的代码拆分和热更新能力。相比于 Vuex&#xff0c;Pinia 的代码结构更加扁平&#xff0c;易于理…...