计算机网络应用层协议部分学习

2023-11-01

计算机网络学习第二章,应用层协议部分

应用层

协议原理

研发网络应用程序的核心是写出能够运行在不同的端系统和通过网络彼此通信的程序。
例如,在Web应用程序中,有两个互相通信的不同的程序:一个是运行在用户主机(桌面机、膝上机、PDA、蜂窝电话等)上的浏览器程序;另一个是运行在Web服务器主机上的Web服务器程序。又比如P2P文件共享系统,在参与文件共享的每台主机中都有一个程序。在这种情况下,每台主机中的这些程序可能都是类似的或相同的。

网络应用程序体系结构

各种端系统上组织该应用程序。在选择应用程序体系结构时,应用程序研发者很可能利用现代网络应用程序中所使用的两种主流体系结构之一:客户机/服务器体系结构或对等(P2P) 体系结构。

CS(客户机服务器体系结构)

在客户机服务器体系结构( client-server architecture)中,有一个总是打开的主机称为服务器,它服务于来自许多其他称为客户机的主机请求。客户机主机既可能有时打开,也可能总是打开。一个典型的例子是Web应用程序,其中总是打开的Web服务器服务于运行在客户机主机上的浏览器的请求。当Web服务器接收到来自某客户机对某对象的请求时,它向该客户机发送所请求的对象作为响应。注意到客户机/服务器体系结构中,客户机相互之间不直接通信,例如,在Web应用中两个浏览器并不直接通信。客户机/服务器体系结构的另一个特征是在客户机/服务器应用中,常会出现一台服务器主机跟不上其所有客户机请求的情况。例如,一个流行的社会联网站点如果仅有一台服务器来处理所有请求,将很快变得不堪重负为此,在客户机服务器体系结构中,常用主机群集(有时称为服务器场( server farm))创建强大的虚拟服务器。基于客户机/服务器体系结构的应用服务通常是基础设施密集的( infrastructure intensive),因为它们要求服务提供商购买、安装和维护服务器场。

P2P体系结构

在P2P体系结构(P2 P architecture)中,对总是打开的基础设施服务器有最小的(或者没有)依赖。相反,任意间断连接的主机对一一称为对等方,直接相互通信。对等方并不为服务提供商所有,而是为用户控制的桌面机和膝上机所有,大多数对等方驻留在家庭、大学和办公室。因为这种对等方通信不必通过专门的服务器,所以该体系结构被称为对等方到对等方(简称为对等)。目前,大多数流行的流量密集型应用程序都是P2P体系结构的,包括文件分发。

进程通信

在操作系统的术语中,进行通信的实际上是进程( process)而不是程序。

客户机和服务器进程
  • 网络应用程序是由成对的进程组成,这些进程通过网络相互发送报文。
  • 对每对通信进程,我们通常将这两个进程之一标示为客户机( client),而另一个进程标示为服务器( server)。在Web中, 浏览器是一个客户机进程,Web服务器是一个服务器进程。对于P2P文件共享,下载文件的对等方被标示为客户机,上載文件的对等方被标示为服务器。
  • 在给定的一对进程之间的通信会话中,发起通信(即在该会话开始时与共他进程联系)的进程被标示为客户机,在会话开始时等待联系的进程是服务器。
进程与计算机网络之间的接口(Socket)
  • 进程通过一个称为套接字( socket)的软件接口在网络上发送和接收报文
  • 由于该套接字是在网络上建立网络应用程序的可编程接口,因此也将套接字称为应用程序和网络之间的应用程序编程接口( Application Programming Interface,API) 应用程序开发者可以控制套接字在应用层端的所有东西,但是对该套接字的运输层端几乎没有控制。
因特网提供的运输服务

因特网提供的运输服务至此,我们已经讨论了计算机网络能够提供的一般运输服务。下面要更为具体地考察因58 第2章特网上的应用程序支持的类型。因特网(更一般地说是TCP/P网络)上的应用使用了两个运输层协议:UDP和TCP。当你(作为ー个软件开发者)创建一个新的因特网应用时,首先要做出的决定是,选择UDP还是选择TCP。每个协议为调用它们的应用程序提供了不同的服务集合。

进程寻址
  • 为了识别接收进程, 需要定义两种信息:①该主机的名称或地址,②用来指定目的主机上接收进程的标识。
  • 在因特网中,主机是用IP地址( IP address)进行标识的。我们将在第4章深入讨论IP地址。此时,我们知道IP地址是用来唯一标识主机的32比特数就足够了(然而,如第4章要讲到的,网络地址转换(NAT)的广泛部署意味着实际中32比特1IP地址不仅仅唯一地用于寻址台主机)。
  • 除了知道报文去往的目的主机的IP地址外,发送程序也必须识别运行在主机上的接收进程。之所以需要该信息,是因为通常在一台主机上能够运行许多网络应用程序。目的地端口号( port number)就是服务于这个目的的。已经给流行的应用程序分配了特定的端口号。例如,Web服务进程用的是80号端口。邮件服务进程(使用SMTP协议)用的是25号端口。

TCP

TCP服务模型包括面向连接服务和可靠数据传输服务。

  • 面向连接服务:使用TCP协议时,在应用层数据报文开始流动之前,其客户机程序和服务器程序之间互相交换运输层控制信息。这个所谓的握手过程提示客户机和服务器做好传输分组的准备。在握手阶段后,就在两个进程的套接字之间建立了一个TCP连接( TCP connection)。这个连接是全双工的,即连接双方的进程可以在此连接上同时进行报文收发。当应用程序结東报文发送时,必须拆除该连接。
  • 可靠数据传输服务:进行通信的进程依常TCP协议,无差错、按适当顺序交付发送的数据。当应用程序的一端通过套接字传送一个字节流时,它能够依靠TCP协议将相同的字节流交付给接收方的套接字,而没有字节的丢失和冗余
  • TCP协议还具有拥塞控制机制,这种服务不一定能为通信进程带来直接好处,但能为因特网带来整体好处。当发送方和接收方之间的网络出现拥塞时,TCP协议的拥塞控制机制会抑制发送进程(客户机或服务器)。
  • TCP的加强版本,称为安全套接字层( Secure Socket Layer,SSL)。用SSL加强后的TCP不仅能够做传统的TCP所能做的一切, 而且还提供了关健的进程到进程的安全性服务,包括加密、数据完整性和端点整別。需要注意的是,SSL不是独立于TCP和UDP的第三种因特网运输层协议,而只是对TCP的加强,这种加强是在应用层上实现的。

TCP三次握手四次挥手

三次握手

所谓的三次握手即TCP连接的建立。这个连接必须是一方主动打开,另一方被动打开的。以下为客户端主动发起连接的图解:

握手之前主动打开连接的客户端结束CLOSED阶段,被动打开的服务器端也结束CLOSED阶段,并进入LISTEN阶段。随后开始“三次握手”:

(1)首先客户端向服务器端发送一段TCP报文,其中:

标记位为SYN,表示“请求建立新连接”;序号为Seq=X(X一般为1);随后客户端进入SYN-SENT阶段。(2)服务器端接收到来自客户端的TCP报文之后,结束LISTEN阶段。并返回一段TCP报文,其中:

标志位为SYN和ACK,表示“确认客户端的报文Seq序号有效,服务器能正常接收客户端发送的数据,并同意创建新连接”(即告诉客户端,服务器收到了你的数据);序号为Seq=y;确认号为Ack=x+1,表示收到客户端的序号Seq并将其值加1作为自己确认号Ack的值;随后服务器端进入SYN-RCVD阶段。(3)客户端接收到来自服务器端的确认收到数据的TCP报文之后,明确了从客户端到服务器的数据传输是正常的,结束SYN-SENT阶段。并返回最后一段TCP报文。其中:

标志位为ACK,表示“确认收到服务器端同意连接的信号”(即告诉服务器,我知道你收到我发的数据了);序号为Seq=x+1,表示收到服务器端的确认号Ack,并将其值作为自己的序号值;确认号为Ack=y+1,表示收到服务器端序号Seq,并将其值加1作为自己的确认号Ack的值;随后客户端进入ESTABLISHED阶段。服务器收到来自客户端的“确认收到服务器数据”的TCP报文之后,明确了从服务器到客户端的数据传输是正常的。结束SYN-SENT阶段,进入ESTABLISHED阶段。

在客户端与服务器端传输的TCP报文中,双方的确认号Ack和序号Seq的值,都是在彼此Ack和Seq值的基础上进行计算的,这样做保证了TCP报文传输的连贯性。一旦出现某一方发出的TCP报文丢失,便无法继续"握手",以此确保了"三次握手"的顺利完成。

此后客户端和服务器端进行正常的数据传输。这就是“三次握手”的过程。

四次挥手

所谓的四次挥手即TCP连接的释放(解除)。连接的释放必须是一方主动释放,另一方被动释放。以下为客户端主动发起释放连接的图解:

  1. 首先客户端想要释放连接,向服务器端发送一段TCP报文,其中:标记位为FIN,表示“请求释放连接“;序号为Seq=U;随后客户端进入FIN-WAIT-1阶段,即半关闭阶段。并且停止在客户端到服务器端方向上发送数据,但是客户端仍然能接收从服务器端传输过来的数据。注意:这里不发送的是正常连接时传输的数据(非确认报文),而不是一切数据,所以客户端仍然能发送ACK确认报文。

  2. 服务器端接收到从客户端发出的TCP报文之后,确认了客户端想要释放连接,随后服务器端结束ESTABLISHED阶段,进入CLOSE-WAIT阶段(半关闭状态)并返回一段TCP报文,其中:标记位为ACK,表示“接收到客户端发送的释放连接的请求”;序号为Seq=V;确认号为Ack=U+1,表示是在收到客户端报文的基础上,将其序号Seq值加1作为本段报文确认号Ack的值;随后服务器端开始准备释放服务器端到客户端方向上的连接。客户端收到从服务器端发出的TCP报文之后,确认了服务器收到了客户端发出的释放连接请求,随后客户端结束FIN-WAIT-1阶段,进入FIN-WAIT-2阶段前"两次挥手"既让服务器端知道了客户端想要释放连接,也让客户端知道了服务器端了解了自己想要释放连接的请求。于是,可以确认关闭客户端到服务器端方向上的连接了

  3. 服务器端自从发出ACK确认报文之后,经过CLOSED-WAIT阶段,做好了释放服务器端到客户端方向上的连接准备,再次向客户端发出一段TCP报文,其中:标记位为FIN,ACK,表示“已经准备好释放连接了”。注意:这里的ACK并不是确认收到服务器端报文的确认报文。序号为Seq=W;确认号为Ack=U+1;表示是在收到客户端报文的基础上,将其序号Seq值加1作为本段报文确认号Ack的值。随后服务器端结束CLOSE-WAIT阶段,进入LAST-ACK阶段。并且停止在服务器端到客户端的方向上发送数据,但是服务器端仍然能够接收从客户端传输过来的数据。

  4. 客户端收到从服务器端发出的TCP报文,确认了服务器端已做好释放连接的准备,结束FIN-WAIT-2阶段,进入TIME-WAIT阶段,并向服务器端发送一段报文,其中:标记位为ACK,表示“接收到服务器准备好释放连接的信号”。序号为Seq=U+1;表示是在收到了服务器端报文的基础上,将其确认号Ack值作为本段报文序号的值。确认号为Ack=W+1;表示是在收到了服务器端报文的基础上,将其序号Seq值作为本段报文确认号的值。随后客户端开始在TIME-WAIT阶段等待2MSL

为什么要客户端要等待2MSL呢?

服务器端收到从客户端发出的TCP报文之后结束LAST-ACK阶段,进入CLOSED阶段。由此正式确认关闭服务器端到客户端方向上的连接。客户端等待完2MSL之后,结束TIME-WAIT阶段,进入CLOSED阶段,由此完成“四次挥手”。后“两次挥手”既让客户端知道了服务器端准备好释放连接了,也让服务器端知道了客户端了解了自己准备好释放连接了。于是,可以确认关闭服务器端到客户端方向上的连接了,由此完成“四次挥手”。与“三次挥手”一样,在客户端与服务器端传输的TCP报文中,双方的确认号Ack和序号Seq的值,都是在彼此Ack和Seq值的基础上进行计算的,这样做保证了TCP报文传输的连贯性,一旦出现某一方发出的TCP报文丢失,便无法继续"挥手",以此确保了"四次挥手"的顺利完成。

UDP服务

  • UDP是一种不提供不必要服务的轻量级运输层协议,它仅提供最小服务。UDP是无连接的,因此在两个进程通信前没有握手过程。UDP协议提供的是不可靠数据传输服务,也就是说,当进程通过UDP套接字发送报文时,UDP协议并不保证该报文能够被接收进程接收到。
    不仅如此,接收进程收到的报文也可能是乱序到达的。
  • 另一方面,因为许多防火墙被配置为阻塞(多数类型的)UDP流量,所以设计者在多媒体和实时应用程序中越来越多地选择使用 TCP[Sripanidkulchai2004]。

应用层协议

应用层协议( application-layer protocol)定义了运行在不同端系统上的应用程序进程如何相互传递报文。特别是应用层协议定义了:

  1. 交换的报文类型,如请求报文和响应报文.

  2. 各种报文类型的语法,如报文中的各个字段及其详细描述。
    字段的语义,即包含在字段中的信息的含义。
    为的要函时带练进程何时、如何发送报文及对报文进行响应的规则。体游

  3. 区分网络应用和应用层协议是很重要的。应用层协议只是网络应用的一部分。我们来看一些例子。Web应用是一种客户机/服务器应用程序,它允许客户机按照需求从Web服务器获得文档。Web应用有很多组成部分,包括文档格式的标准(即HTML)、Web浏览器(如Firefox和 Microsoft Internet Explorer)、Web服务器(如 Apache、 Microsoft服务器程序),以及一个应用层协议。Web的应用层协议是HTTP

Web应用和HTTP协议

Web的应用层协议是超文本传输协议,它是Web的核心,在[RFC1945]和IRFC261이中进行了定义。HTTP协议由两部分程序实现:一个客户机程序和一个服务器程序,它们运行在不同的端系统中,通过交换HTTP报文进行会话。HTTP 定义了这些报文的格式以及客户机和服务器是如何进行报文交换的。

  1. Web页面( Web page,也叫文档)是由对象组成的。对象( object)简单来说就是文件, 如HTML文件、JPEG图形文件、Java小程序或视频片段文件,这些文件可通过一个URL地址寻址。多数Web页面含有一个基本HTML文件( base HTML file)以及几个引用对象。

  2. 在基本HTML文件中通过对象的URL地址对对象进行引用。每个URL地址由两部分组成:存放对象的服务器主机名和对象的路径名。

  3. Web服务器( Web server)用于存储Web对象,每个对象由URL寻址。Web服务器实现了HTTP的服务器端,流行的Web服务器程序有Apache和MicrosoftInternetInformation Server

  4. 当用户请求一个Web页面(如点击一个超链接)时,浏览器向服务器发出对该页面中所包含对象的HTTP请求报文,服务器接受请求并用包含这些对象的HTTP 响应报文进行响应。

  5. HTTP使用TCP(而不是UDP)作为它的支撑运、运行Internet Explorerf的PC王本运行 Firefox 的 Linux 运行 Apache Web 服务器的服务器图2-6HTTPE的请求一响应行为输层协议。HTTP客户机发起一个与服务器的TCP连接,一且连接建立,浏览器和服务器进程就可以通过套接字接口访向TCP。

  6. 服务器向客户机发送被请求的文件时,并不存储任何关于该客户机的状态信息。假如某个特定的客户机在短短的几秒钟内两次请求同一个对象,服务器并不会因为刚刚为该用户提供了该对象就不再做出反应,而是重新发送该对象,就像该服务器已经完全忘记不久之前所做过的事一样。因为一个HTTP服务器并不保存关于客户机的任何信息,所以我们说HTTP是一个无状态协议(statelessprotocol)

HTTP报文格式
HTTP请求报文

HTTP请求报文的第一行叫做请求行(requestline), 其后继的行叫做首部行( header line)。请求行有3个字段:方法字段、URL字段和HTP协议版本字段。

首部行Host:www.someschoo1.edu定义了目标所在的主机。

通过包含connection:c1ose首部行,浏览器告诉服务器不希望麻烦地使用持久连接,它要求服务器在发送完被请求的对象后就关闭连接。User- agent:首部行用来定义用户代理,即向服务器发送请求的浏览器的类型。这里浏览器的类型是Mozi11a/4.0,即 Netscape浏览器。

首部行(和附加的回车换行符)后有一个“实体主体”( entity body)。使用GET方法时实体主体为空,而使用POS方法时才使用。
HTTP客户机常常在用户提交表单时使用POST方法,例如,用户向搜索引提供搜索关键词在使用POST方法的报文中,用户仍可以向服务器请求一个Web页面,但Web页面的特定内容依赖于用户在表单字段中输入的内容。当方法字段的值为POST时,实体主体中包含的就是用户在表单字段中输入的值

HTTP响应报文
用户与服务器的交互: cookie

然而一个Web站点通常希望能够识别用户,既可能是因为服务器想限制用户的访问,又可能是因为它想把内容与用户身份关联起来。

cookie技术有4个组成部分:①在HTTP响应报文中有一个cookie首部行; ②在HTTP请求报文中有一个cookie首部行③在用户端系统中保留有一个cookie"文件,由用户的浏览器管理;④在Web站点有一个后端数据库。

Web缓存

  • Web缓存器( Web cache)也叫代理服务器( proxy server)
  • 代表初始Web服务器来满足HTP请求的网络实体
  • Web缓存器有自己的磁盘存储空间,并在该存储空间中保存最近请求过的对象的拷贝。
    1. 浏览器建立一个到Web缓存器的TCP连接并向Web缓存器中的对象发送一个HTTP请求
    2. Web缓存器检查本地是否存储了该对象拷贝。如果有,Web缓存器就用HTTP响应报文向客户机浏览器返回该对象。
    3. 如果Web缓存器没有该对象,它就与该对象的初始服务器(如ww. homeschool.edu)打开一个TCP连接。Web缓存器则在TCP连接上发送客户机初始获取该对象的HTP请求。在收到请求后,初始服服务器务器向Web缓存器发送具有该对象的HTTP响应。
    4. 当Web缓存器接收该对象时,它在本地存储空间存储了一份拷贝,并用HTTP响应报文向客户机的浏览器发送该拷贝(通过已经建立在客户机浏览器和Web缓存器之间的TCP连接)。

文件传输协议:FTP

用户通过一个FTP用户代理与FTP交互。该用户首先提供远程主机的主机名,使本地主机的FTP客户机进程建立一个到远程主机FTP服务器进程的TCP连接。然后,该用户提供用户标识和口令,作为FIP命令的一部分在该TCP连接上传送。一旦该服务器向该用户授权, 用户就可以向远程文件系统拷贝存放在本地文件系统中的一个或者多个文件(反之亦然)。

用户坐在一台主机(本地主机)前面,向一台远程主机上传文件或从远程主机下载文件。为使用户能访问远程主机的账户,用户必须提供一个用户标识和口令在提供了授权信息后,用户就能从本地文件系统向远程主机文件系统传送文件,反之亦然。

当用户主机与远程主机开始一个FTP会话前,FTP的客户机(用户)首先在21号端口上发起一个用于控制的与服务器(远程主机)的TCP连接。FTP的客户机通过该控制连接发送用户的标识和口令,也发送改变远程目录的命令。当FTP的服务器端从该连接上收到一个文件传输的命令后(无论是到远程主机还是从远程主机),就发起一个到客户机的数据连接。FTP在该数据连接上准确地传送一个文件并关闭该连接。如果在同一个会话期间,用户还需要传输另一个文件,FTP则打开另一个数据连接。因而对FTP传输而言,控制连接贯穿了整个用户会话期间,但是针对会话中的每一次文件传输都需要建立一个新的数据连接(即数据连接是非持久的)。

FTP服务器必须在整个会话期间保留用户的状态( state)信息。

FTP使用两个并行的TCP连接来传输文件,一个是控制连接( control connection),一个是数据连接( data connection)。
控制连接用于在两个主机之间传输控制信息,如用户标识、口令、改变远程目录的命令以及put”和“get”文件的命令。

数据连接用于实际传输一个文件。因为FTP协议使用一个分离的控制连接,所以我们也称FTP的控制信息是带外(out-of-band)传送的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SP1RIozK-1595044189382)(https://i.loli.net/2020/07/18/vRK3zZUXOxkJtfE.png)]

ata connection)。
控制连接用于在两个主机之间传输控制信息,如用户标识、口令、改变远程目录的命令以及put”和“get”文件的命令。

数据连接用于实际传输一个文件。因为FTP协议使用一个分离的控制连接,所以我们也称FTP的控制信息是带外(out-of-band)传送的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算机网络应用层协议部分学习 的相关文章

  • Android - 如何访问 onResume 中 onCreate 中实例化的 View 对象?

    In my onCreate 方法 我正在实例化一个ImageButton View public void onCreate Bundle savedInstanceState super onCreate savedInstanceSt
  • 如何在 Eclipse 中用阿拉伯语读写

    我在 eclipse 中编写了这段代码来获取一些阿拉伯语单词 然后打印它们 public class getString public static void main String args throws Exception PrintS
  • 检查双精度值的等于和不等于条件

    我在比较两者时遇到困难double values using and 我创建了 6 个双变量并尝试进行比较If健康 状况 double a b c d e f if a b c d e f My code here in case of t
  • 如何对 IntStream 进行逆序排序

    我正在使用 txt 文件读取数字BufferedReader 我想颠倒该流中元素的顺序 以便在收集它们时 它们将从最高到最低排列 我不想在构建数组后进行排序 因为我不知道其中可能有多少元素 我只需要最高的 N 个元素 in new Buff
  • 如何解决 onEditCommit 事件上的类型不匹配错误?

    我在 Fxml 中使用 onEditCommit 事件在用户编辑数据后检索数据 FXML 代码
  • Java 重写 hashCode() 得到 StackOverflowError

    所以我不太熟悉重写 hashCode 并且我似乎在 hashCode 方法中以某种方式进行了一些无限递归 这是我的场景 我有一个 DuplicateCache 类 它是一个缓存对象 用于检查系统中的重复对象 我有一个静态内部类 Duplic
  • 方法断点可能会大大减慢调试速度

    每当向方法声明行添加断点 在 Intellij IDEA 或 Android Studio 中 时 都会出现一个弹出窗口 方法断点可能会大大减慢调试速度 为什么会这样戏剧性地减慢调试速度 是我的问题吗 将断点放在函数的第一行有什么不同 Th
  • Android - 除了普通 SSL 证书之外还验证自签名证书

    我有一个通过 SSL 调用 Web 服务的 Android 应用程序 在生产中 我们将拥有由受信任的 CA 签名的普通 SSL 证书 但是 我们需要能够支持自签名证书 由我们自己的 CA 签名 我已经成功实施了接受自签名证书的建议解决方案
  • spring - 强制 @Autowired 字段的 cglib 代理

    我有混合堆栈 EJB 和 Spring 为了将 Spring 自动装配到 EJB 我使用SpringBeanAutowiringInterceptor 不确定这是否会影响我遇到的问题 在尝试通过以下方式自动装配 bean 时 Scope p
  • HTTPbis - bis 是什么意思?

    我经常看到 bis 附加到协议版本 例如 v 34bis 或 httpbis bis 是什么意思或代表什么 我认识的一位电信工程师认为它可能起源于法国 正如其他人已经说过的 bis 来自 两次 或 重复 http oxforddiction
  • Java:VM 如何在 32 位处理器上处理 64 位“long”

    JVM 如何在 32 位处理器上处理 64 位的原始 long 在多核 32 位机器上可以并行利用多个核心吗 64 位操作在 32 位机器上慢了多少 它可能使用多个核心来运行不同的线程 但不会并行使用它们进行 64 位计算 64 位长基本上
  • 参数动态时如何构建 JPQL 查询?

    我想知道是否有一个好的解决方案来构建基于过滤器的 JPQL 查询 我的查询太 富有表现力 我无法使用 Criteria 就像是 query Select from Ent if parameter null query WHERE fiel
  • 为什么 Firefox 会忽略缓存标头并在刷新时重新验证?

    我有一些不可变的图像资源 可以永久缓存 Chrome 似乎尊重我的响应标头 并且不会重新验证资源 以下是 Chrome 中其中一项资源的示例 正如你所看到的 我包括cache control public max age expires e
  • 在 AKKA 中,对主管调用 shutdown 是否会停止其监督的所有参与者?

    假设我有一位主管连接了 2 位演员 当我的应用程序关闭时 我想优雅地关闭这些参与者 调用supervisor shutdown 是否会停止所有参与者 还是我仍然需要手动停止我的参与者 gracias 阻止主管 https github co
  • 如何在android sdk上使用PowerMock

    我想为我的 android 项目编写一些单元测试和仪器测试 然而 我遇到了一个困扰我一段时间的问题 我需要模拟静态方法并伪造返回值来测试项目 经过一些论坛的调查 唯一的方法是使用PowerMock来模拟静态方法 这是我的 gradle 的一
  • 来自客户端的超时 Web 服务调用

    我正在使用 RestEasy 客户端调用网络服务 一项要求是 如果调用运行时间超过 5 秒 则中止 超时调用 我如何使用 RestEasy 客户端实现这一目标 我只看到服务器端超时 即如果在一定时间内未完成请求 Rest Easy 网络服务
  • 如何移动图像(动画)?

    我正在尝试在 x 轴上移动船 还没有键盘 我如何将运动 动画与boat png而不是任何其他图像 public class Mama extends Applet implements Runnable int width height i
  • struts 教程或示例

    我正在尝试在 Struts 中制作一个登录页面 这个想法是验证用户是否存在等 然后如果有错误 则返回到登录页面 错误显示为红色 典型的登录或任何表单页面验证 我想知道是否有人知道 Struts 中的错误管理教程 我正在专门寻找有关的教程 或
  • Java中获取集合的幂集

    的幂集为 1 2 3 is 2 3 2 3 1 2 1 3 1 2 3 1 假设我有一个Set在爪哇中 Set
  • 尝试使用带有有效购买令牌的 Java Google Play Developer API v3 检索应用内购买信息时出现错误请求(无效值)

    当使用 Java Google Play Developer API 版本 3 并请求有效购买令牌的购买信息时 我收到以下异常 API 调用返回 400 Bad Request 响应以及以下消息 code 400 errors domain

随机推荐

  • C++ VScode配置libtorch,并调用PyTorch模型

    C VS配置libtorch 调用TorchScript模型 获取pytorch模型 转成C 模型 下载配置libtorch库 VS 1 首先是下载libtorch库 2 VS中配置 C 调用模型 获取pytorch模型 将训练好的模型保存
  • discuz手机客户端java,Discuz 触屏手机版支持视频播放的方法

    if defined IN MOBILE if strpos msglower media FALSE message preg replace media w s url message if strpos msglower audio
  • WEB安全之:Oracle 数据库 SQL 注入

    郑重声明 本笔记编写目的只用于安全知识提升 并与更多人共享安全知识 切勿使用笔记中的技术进行违法活动 利用笔记中的技术造成的后果与作者本人无关 倡导维护网络安全人人有责 共同维护网络文明和谐 SQL 注入 Oracle 数据库 1 Orac
  • as汇编命令(来自 深入理解Linux内核)

    as汇编命令 来自 深入理解Linux内核 as汇编命令 汇编命令是指示汇编器操作方式的伪指令 汇编命令用于要求汇编器为变量分配空间 确定程序开始地址 指定当前汇编的区 修改位置计数器值等 所有汇编命令的名称都以 开始 其余是字符 并且大小
  • 基于R语言的数据可视化:平行坐标轴图

    基于R语言的数据可视化 平行坐标轴图 数据可视化是数据分析过程中重要的一环 它能够帮助我们更直观地理解数据之间的关系 趋势和模式 在R语言中 有许多包可以用于实现不同类型的数据可视化 其中 GGally包提供了丰富的功能 可以用来绘制多变量
  • 工业机器人三点工具定位法图文_工业机器人工具坐标系的设置

    何淼 摘要 该文以FANUC工业机器人为例 从工具坐标系设置的意义出发 分析了不同机器人设置工具坐标系的方法 成功建立了机器人新的工具坐标系 为机器人精确的运动控制奠定基础 关键词 工业机器人 坐标系 TCP 中图分类号 TP319 文献标
  • 垂直同步

    vblank时间 显示器显示一帧的时间 显卡或芯片输出的图像数据写在后缓存里 屏幕读取前缓存的图像数据并显示 后缓存数据写入完毕后 前后缓存进行交换 如果前缓存的图片写入速度与屏幕读取图像的刷新率不匹配会发生画面撕裂 解决办法 垂直同步 当
  • JAVA中那些令人眼花缭乱的锁

    一 开局一张图带你了解java相关的锁 二 乐观锁和悲观锁 1 悲观锁 悲观锁对应于生活中悲观的人 悲观的人总是想着事情往坏的方向发展 举个生活中的例子 假设厕所只有一个坑位了 悲观锁上厕所会第一时间把门反锁上 这样其他人上厕所只能在门外等
  • mysql 优化杂记

    慢日志分析 SELECT user id AS userId charm AS num FROM db charm WHERE user id NOT IN ORDER BY num DESC userId LIMIT 性能分析 not i
  • Python 爬虫逆向

    Python 爬虫逆向是指使用 Python 语言来编写爬虫程序 用于爬取网站的信息 爬虫逆向一般指的是通过分析网站的网页代码和加载流程 来确定网站信息获取的方式 并使用爬虫程序来模拟这种方式 从而获取网站的信息 爬虫逆向的主要目的是通过自
  • 为什么spark读取本地的json文件会自动去hdfs上去找?读取不到本地的文件

    问题描述 遇到的问题如上图所示 我在spark中读取的json文件明明是集群本地的文件 可是他偏偏就自作聪明去了hdfs上面去找我的文件 那肯定会报错啊 我hdfs上怎么可能有这个文件嘛 原因 我在spark中的运行环境配置了yarn关联
  • 协调器是如何获取终端的IEEE地址并自动对其分配网络短地址呢

    协调器是如何获取终端的IEEE地址并自动对其分配网络短地址呢 字号 订阅 协调器是如何获取终端的IEEE地址并自动对其分配网络短地址呢 猜想如下 终端上电后稳定后就开始寻找周围是否存在网络 向周围发射广播 该广播内容包含自己的身份信息 即M
  • Koa2框架中使用bcrypt实现密码加密

    bcrypt是一个用于密码哈希的库 它使用了单向哈希函数 因此即使在数据库中存储了哈希后的密码 也不容易还原出原始密码 下面是在Koa 2中使用bcrypt的基本步骤 使用npm npm install bcrypt 使用yarn yarn
  • 手把手教你mysql基本操作

    MySQL的基本操作 首先我们要知道怎么打开Mysql客户端 打开开始界面 这两个都是Mysql的客户端 随便打开哪个都可以 如果设置了密码的就输入自己的密码 没有设置密码的则不需要输入 直接就可以进行操作 输入密码正确后界面如下 接下来我
  • java 简述类的封装性、继承性、多态性

    一 什么是封装性 继承性 多态性 封装性 通俗说就是一个盒子 多个对象 功能 组件等装在一个盒子里 内部具体是什么不知道 用到它时 使用特定方法或功能去调用它 即声明一个变量 其属性值是private 不能给其变量直接赋值 但可以通过方法构
  • 利用尾插法建立单链表

    PTA 5 3本题目要求利用尾插法建立单链表 输入格式 输入数据为若干正整数 最后以 1表示结尾 1不算在序列内 不要处理 所有数据之间用空格分隔 输入样例 1 2 3 4 5 6 7 8 9 1 输出样例 1 2 3 4 5 6 7 8
  • ❤️UNITY实战进阶-三维AABB包围盒详解-6

    前言 碰撞检测问题在虚拟现实 计算机辅助设计与制造 游戏 机器人等方面都有着广泛的应用 而包围盒算法是进行碰撞检测的重要方法之一 而常见的包围盒有 AABB包围盒 Axis aligned bounding box 包围球 Sphere O
  • 小程序创建公共js获取接口数据,全局调用

    新建一个js文件 let app getApp function getImageurl return new Promise function resolve reject wx request url 接口地址 method get d
  • STM32通过esp8266连接WiFi接入MQTT服务器

    上文我们讲到如何搭建本地MQTT服务器http t csdn cn aHNcO 现在介绍如何通过stm32连接MQTT 一 首先我们初始化esp8266这里我们使用的是USART4与其通信代码如下 void UART4 Init uint3
  • 计算机网络应用层协议部分学习

    计算机网络学习第二章 应用层协议部分 应用层 协议原理 研发网络应用程序的核心是写出能够运行在不同的端系统和通过网络彼此通信的程序 例如 在Web应用程序中 有两个互相通信的不同的程序 一个是运行在用户主机 桌面机 膝上机 PDA 蜂窝电话