网络编程、Socket套接字编程

      最后更新:2022-04-16 09:49

      网络编程

      内容介绍

      • 网络通信协议
      • UDP通信
      • TCP通信

      内容学习目标

      能够独立写入源代码、编译并执行文件上传设想方案 。

      网络通信协议

      计算机网络可以将一些计算机连接在一起。若干条例管理同一网络上计算机的连接和通信。类似公路上的汽车必须遵守交通法在计算机网络中,这些连接和通信标准被称为网络通信协议。它具体规定了标准数据传输格式、传输率、传输阶段等等。只有通信双方同时遵守规则,数据交换才能实现。基于网络的通信协议有多种口味。政府目前正在使用最常用的TCP/IP议定书(转让控制议定书/互联网转让控制议定书/互联网连接议定书)。这是TCP/IP协议。《UDP(用户数据表议定书)协定》以及若干补充协定。在我们达成具体协定之前,让我们先看看TCP/IP议定书小组的等级结构。

      当数据传输时,发送的数据必须与收到的数据完全相同,在这一点上,必须将大量信息添加到现有数据中,以保证数据在整个传输过程中采用完全一致的格式,TCP/IP协议结构相当直截了当,并分为四个层次,如图所示。

      上述图象将TCP/IP协议的四个层次描述为应用层、传输层、网络层和链层,每个层次负责不同的通信功能,然后对四个层次进行全面讨论。

      链层用于指定实际传输通道,对于光纤、网格线等特定网络连接装置而言,通常是驱动程序协议。

      网络层是TCP/IP协议的核心,用于汇总传输的数据,并将集群数据传送到目的地计算机或网络。

      就网络通信而言,通常利用运输层与TCP或UDP协议进行通信。

      申请一级的协议是那些主要负责申请的协议,如HTTP协议、FTP协议等。

      IP地址和端口号

      使网络上的机器能够相互交流,每台计算机必须有一个独特的识别号码。该标识表示接收或交付数据的机器。根据TCP/IP议定书协议,这是互联网协议(IP)地址。它只能识别电脑目前,IPv4 是最常用的 IP 地址形式 。它由一个四字节二进制的号码表示。如:
      00001010000000000000000000000001。因为IP地址很难以二元形式记住和理解。因此,IP地址通常采用小数位数的形式。每个字节代表小数点数(0-255)。"典型的跨系统" 由他们自己举个例子,"。"随着计算机网络规模的扩大对IP地址的需求正在增加。四字节后, IPV4 IP 地址用完了 。这就是为什么 IPv6 创建的原因 。IPv6 中的 IP 地址是 16 字节长 。其地址能力大约是IPv4的8 x 1028倍。总人数为2 128人(零)。这就解决了网络地址资源不足的问题。

      IP 地址允许您连接到特定的机器 。但是,如果你需要访问 目标计算机的应用程序之一,还需要指定端口号。在计算机中,端口号区分了各种应用程序。端口号由两个字节( 16 位二进制) 表示。其规模为0至65535。其中,一些众所周知的网络服务和应用程序在0至1023之间使用门户代码。用户的典型程序需要超过 1024 的端口 。这使港口号无法用于其他应用程序或服务。

      IP 地址和端口号的函数将使用以下图像中显示的示例显示为下一个 。

      上图显示,网络上的一台计算机可通过IP地址与另一台计算机连接,目标机器上的一个应用程序可通过港号连接。

      InetAddress

      为了进一步理解IP地址的目的,我们查看JDK的Inneraders类,该类用于封装IP地址并提供各种IP相关方法,其中一些方法在下表中InetAddress类别下广泛使用。

      方法声明

      功能描述

      InetAddress getByName(String host)

      如果提供了主机名, 参数主机将指定指定的主机, 用于获取主机的 IP 地址 。

      InetAddress getLocalHost()

      要代表本地主机,请创建一个 InetAddress 对象。

      String getHostName()

      获得 IP 地址的主机名、 计算机名称( 如果在家) 的 IP 地址、 计算机名称( 如果在家) 的 IP 地址( 如果在家), 主机名( 如果不在家 ) 和 IP 地址( 如果不是域)

      String getHostAddress()

      要获取字符串格式,请使用原 IP 地址。

      上表中,INETAddress经常使用四种方法。其中,前两项战略用于确定这一类别的目标群体。第一种方法返回 InetAddress 对象,该对象代表所提供的主机。第二种技术用于获取用户本地的INETAddress 对象。InternetAddress 对象提供对所提供主机名的访问权限。IP地址等,以下示例显示了 InetAddress 所使用的功能 。如下所示。

      import java.net.InetAddress;

      public class Example01 {

      public static void main(String[] args) throws Exception {

      InetAddress localAddress = InetAddress.getLocalHost();

      InetAddress remoteAddress = InetAddress.getByName("www.atguigu.cn");

      我不知道你在说什么,System。 我不知道你在说什么。 IP地址:+
      localAddress.getHostAddress());

      我不知道你在说什么 System 我不知道你在说什么 出局 Println ("Atguigu的IP地址:"+")
      remoteAddress.getHostAddress());

      我不确定你在说什么 系统,我不知道你在说什么,出去。 它叫做:+远程地址。 Get HostName ();

      }

      UDP与TCP协议

      在引入TCP/IP结构的同时,报告了两项重要的高传输层协定。TCP和UDP是两项议定书。用户数据表协议作为UDP缩写。用户数据报告协议就是它所谓的。TCP是《传输控制议定书》的缩略语。称为传输控制协议。

      UDP协议介绍

      UDP代表断断续续的通信协议。即在数据传输时,数据传输机与数据接收机之间没有逻辑关系。简单来说,当一台计算机将数据传送给另一台计算机时,发件人不证明接收端的存在。就会发出数据,同样,当数据交付给收件人时,发送者将不接收数据。由于联合民主党协议所消耗的资源很少,通信效率高,因此,UDP协议通常用于音频、视频和电视会议等定期数据传输。因为即使不时缺少一两个数据包,情况也是如此。与接收结果无关然而,当利用UDP协议发送数据时,由于联合民主党没有联系,无法保证数据准确。因此,不建议在提供重要数据时采用联合民主党协议。下图说明了民主联盟的交流机制。

      TCP协议介绍

      TCP议定书是一份以联系为导向的通信议定书。目的是在发送者与提供数据前接收端之间建立逻辑联系然后再传输数据,它确保两个计算机之间以可靠和顺畅的方式发送数据。与TCP连接时,必须确定客户和服务器。客户向服务发送连接请求 。使用“三握手”来确定每个连接。第一次握手,客户启动与服务器的连接请求 。等待服务器确认,第二次握手,服务器响应客户的要求这是第一次与客户建立连接。第三次握手,无法关闭临时文件夹:%s。确认连接。下面的图示描述了整个互动程序。

      由于TCP协议以连接为导向,它保证了数据传输的安全并被广泛使用,例如,在下载文件时,如果数据接收是部分的,它将导致文件数据丢失,无法访问,因此必须使用TCP协议。

      UDP通信

      DatagramPacket

      如前所述,联合民主党是一个没有关联的协议。因此,在沟通时,没有要求在发送者和接收端之间建立联系。联合民主党通讯议定书类似于航运公司在两个码头之间运输货物。货物在港口交付和收到后,必须装上集装箱。民主联盟的通信也是如此。交付和收到的数据也必须捆绑在“容器”中。因此,JDK包括一个数据法包类。等同的容器就是这种类型的一个例子。在联合民主党的通信中,用于封装交付或收到的数据。

      要生成数据表包对象,请先构建数据表包对象。首先,我们必须了解它是如何建立的。当在发件人和接收人上建立数据组包对象的结尾时,采用的建筑方法各有不同。接收端的建设方法只要求一个字节阵列来保存收到的数据。发送方的解决方案不仅仅是接收包含给定数据的字节阵列。IP地址和原产地港地址也是必要的。这篇文章是我们API特别报导的一部分。数据仪包包构造技术详细深入。

      • DatagramPacket(byte[] buf,int length):

      使用这种构造方式生成数据组包件天体,指定了字节数组的大小和附加数据的数据。没有提供 IP 地址或端口号 。很明显,这些物品只能在接收端使用。不能用于发送端。由于发送者必须指明数据目的地(ip地址和港号),必须确定数据目的地。此外,并不要求接受者知道数据的实际来源。只应发送数据。

      • DatagramPacket(byte[] buf,int length,InetAddress addr,int port):

      使用这种构造方式生成数据组包件天体,不仅指定了字节数组的大小和附加数据的数据。还具体说明了数据集的目标IP地址(addr)和端口号(port)。通常,该对象用于发件人。既然您在传输数据时必须提及收件人的 IP 地址和端口号,好像运送物品的集装箱 一定有收货人的地址

      如下表所示,上文提到了数据组包的基本方法,随后全面讨论了数据组包类通常使用的方法。

      方法声明

      功能描述

      InetAddress getAddress()

      此方法用于返回发件人或接收端的IP地址,如果发件人的Datagram Packet 对象,则返回接收端的IP地址,反之亦然,还返回发件人的IP地址。

      int getPort()

      3⁄4 ̄ ̧漯B

      byte[] getData()

      此方法返回要接收或传输的数据, 如果数据组包装对象在发送者上, 则返回要发送的数据, 反之亦然, 则返回收到的数据 。

      int getLength()

      3⁄4 ̄ ̧漯B

      DatagramSocket

      Datagram Packet 的功能是充当“ 容器 ” 。在传输或接收端,可以对数据进行包装。然而,仅仅在“集装箱”内运输产品是不够的。还需要有码头。数据组包装数据包是程序期间所需的唯一通信。为此,JDK包括一个数据组套件类。DatagramSocket 类功能与对接功能相似。您可以使用这类示例对象传输和接收数据组包数据包包。下面的图像描述了数据传输方法。

      用于在发射机和接收端上创建数据仪和接收端上数据仪的原始天体的技术同样不同。这里描述了数据仪类中经常使用的构造方法。

      • DatagramSocket():

      当系统分配一个未被其他网络应用程序使用的端口号码时,将使用建筑技术在发件人端上建造一个数据表套件,在数据表套件天体建造时没有提供端口号码。

      • DatagramSocket(int port):

      此方法可用于在接收端生成数据组套件对象。您也可以为发件人制作一个数据组套件对象。在为接收器建造数据组套件天体时,必须指定一个端口号 。因此,你可以倾听所选港口的声音。

      我们讨论了上述数据组创建技术,随后充分讨论了数据组类别中经常使用的方法。

      方法声明

      功能描述

      void receive(DatagramPacket p)

      此函数用于将接收的数据填入 Datagram Packet 数据包中,该数据包在接收数据之前被屏蔽,只有在收到数据包时才返回。

      void send(DatagramPacket p)

      该技术用于提供数据组包数据包,其中包括发送的数据、数据长度、目的地主机IP地址和端口号。

      void close()

      关闭当前的 Socket, 告诉驱动程序, 分配给此 Socket 的资源已经释放 。

      UDP网络程序

      会上讨论了数据组包和数据组在议事过程中的功能,随后对其专门应用进行了个案研究。

      以下图片是UDP发射机和接收机的互动图像,而原始图像是UDP.Bmp。

      联合民主党的通信需要建立发送程序和接收程序,显然,只有接收程序在通信中首先运行,以避免由于发送者提供的数据无法接受而造成数据损失,因此,接收-终端程序必须首先完成。

      TCP通信

      我们已经学会了如何使用UDP进行交流。我们会学会如何使用TCP进行交流TCP和UDP通信是可互换的。这是第一次使用计算机连接另一台计算机。必须在对话的两侧创建套接字对象 。区别在于,有了UDP,只有发件人和接收人。对客户和服务器不加区分。数据可以随机在计算机之间传送。虽然客户与服务器之间的TCP联系可以明确识别,但缺乏关于如何互动的信息。在通信时,为了进行通信,客户必须建立与服务器的连接。服务器不允许与客户端通信 。此外,服务器侧软件必须提前启动。等待客户端的连接。

      为了实施TCP进程,JDK提供了两种选择。服务器套件类就是一个例子。用于表示服务器端,一个例子就是索克特类。用于表示客户端。通信时,创建服务器套件对象, 首先代表服务器客户端 。对象对应于服务开始。然后等待客户连接。然后,代表客户创建一个 Socket 对象, 以便向服务器提出连接请求 。服务器端响应请求,两者的连结开始沟通数字描绘了整个沟通过程。1.Bmp是TCP图的原始数字。

      ServerSocket

      你知道,通过从前线学习,在创建TCP软件的同时,最初,您必须开发服务器端软件 。JDK的java。 网络包包括一个服务器套餐类。服务器元件元件程序是此类别中对象的例子 。这是第一次引用 API 文档。ServerSocket级有几种建筑方法。随后逐个说明服务器套件的创建技术。

      • ServerSocket(int port):

      使用此构建方法创建服务器套件对象时,您可以将其连接到一个特定的端口号(端口号是参数端口)。端口号可设为零 。该系统然后将分配给我们一个尚未被任何其他网络应用程序使用的端口号。因为客户需要通过所提供的端口号码访问服务器软件,这就是为什么随机的端口号分布不常见的原因。服务器终端软件一般会监听某个端口号码。

      上述建筑方式的第二个方式是最常用的。 学习如何使用 ServerSocket 的建筑方法创建天体后, 了解ServerSocket 通常使用的方法, 如上述建筑方法的表程序曲线所示, 最常用的方法。 学习如何使用 ServerSocket 的建筑方法创建天体后, 了解ServerSocket 通常使用的方法, 如表格所示 。

      方法声明

      功能描述

      Socket accept()

      此函数用于等待客户端连接, 并在客户端连接前被屏蔽, 如果找到客户端连接, 则返回匹配的 Socket 对象 。

      InetAddress getInetAddress()

      此函数返回 InetAddress 对象, 其IP 地址受 ServerSocket 约束 。

      ServerSocket负责监听计算机的端口号。在服务器套件对象创建后,它必须保持引用对象的接受()功能。接受客户询问。当使用被接受() 函数时,服务器端软件将被禁用 。除非客户提出连接请求,否则它无法运作。接受() 函数产生一个可用于与客户端通信的 Scoket 对象 。这一程序将无限期地执行。

      Socket

      这是一个服务端应用程序, 解释服务器套件天体的能力 。因此,单靠到达服务器终端软件完成通信是不可能的。还需要一个客户软件与之接口。因此,JDK包括一个套接字班。完成TCP客户软件。根据API的文件,Socket类也有一些建筑方法。随后全面概述Socket经常采用的建筑方法。

      1、Socket()

      要制作套接字对象, 请使用此构建程序 。没有提到IP地址或端口号。只是客户对象是由这个结果产生的。没有服务器连接 。当您使用此构建技术创建一个对象时, 您必须调用“ 对象( 组合式地址终端) ” 方法, 您必须调用“ 组合式地址终端” 方法来创建对象, 您必须调用“ 组合号( 组合式地址终端) ” 方法 。完成与所选服务器端的连接,IP地址和端口号由端点封装。

      2、Socket(String host, int port)

      要制作套接字对象, 请使用此构建程序 。会根据参数去连接在指定地址和端口上运行的服务器程序,其中参数host接收的是一个字符串类型的IP地址。

      3、Socket(InetAddress address, int port)

      参数地址用于接受InetAddress型号的一个对象,该对象用于封装与第二种建筑技术相似的IP地址。

      第一种建筑技术在Socket上述建筑方法中最常使用。 了解Socket建筑方法的使用之后,学习Socket的惯常方法,如表所示。

      方法声明

      功能描述

      int getPort()

      此函数产生一个与Socket 对象服务器端端相关的端口号的整型对象。

      InetAddress getLocalAddress()

      此方法用于获取与套接字对象相关的本地 IP 地址, 并加密 IP 地址, 然后再返回 InnetAddress 类型对象 。

      void close()

      此方法用于结束 Socket 连接和通信 。 任何与套接字相关的输入/ 输出流都应该在锁链关闭前关闭, 因为良好的程序应该在执行完成后释放所有资源 。

      InputStream getInputStream()

      此函数产生输入Stream 类型的输入流对象, 用于读取客户端提供的数据, 如果该对象从服务器端 Socket 返回, 而反之亦然。

      OutputStream getOutputStream()

      此函数产生输出Stream 类型的输出流对象, 当Socket 在服务器端返回时, 用于向客户端传送数据, 反之亦然 。

      在索克特班最流行的方法中GetInputStream () 和 GetOutStream () 分别用于收集输入和输出流 。当客户与服务挂钩时,数据是交互式的,以IO流的形式列报。从而实现通信。以下步骤是使用图表显示服务器和客户方的数据交换情况。如下图所示。

      一个简单的 TCP 网络应用程序

      掌握了服务器套件和套件类别的基本用途,随后对图中显示的TCP连接进行了案例研究。

      要建立 TCP 通信,必须建立一个服务器终端程序和客户端程序,首先需要一个服务器终端程序,以确保数据传输的安全。

      TCP 方案 - 文件上传

      目前,大多数服务器都有文件上载能力,这显然需要使用TCP协议,因为文件上载需要数据安全和完整性。第二种情景是图像上载,如下图所示。原件:文件上载。Bmp

      • 然后创建服务器终端软件,用于接收图像。

      总结

      知识点总结

      • 网络标签是用来代表我们自己的机器的唯一物品,而不是IP地址。
      • 端口号:用于区分当前机器上应用程序的编号。
      • UDP:传输速度快,但数据丢失很常见,如视频和音频对话。
      • TCP:可靠且不丢失数据的数据传输,如上载和下载文件。
      • 与用户互动的 AUDP 进程发报机。

      1. 创建数据套件对象。

      2. 创建数据组包件对象和封装数据。

      3,发送数据

      4,释放流资源

      • 接收端

      1. 创建数据套件对象。

      2. 创建数据组包件对象。

      3, 接收来自数据组包装物体的数据

      4. 获取数据仪包装物体的内容。

      5,释放流资源

      • TCP 应用程序接口客户端

      1. 创建客户端套接字对象。

      2. 获取Socket输出流对象。

      3,写数据给服务器

      4 个获得 Socket 输入流对象

      5. 利用输入流并阅读反馈。

      6,关闭流资源

      • 服务器端

      1. 创建服务器服务器套件对象并给出服务器端口号。

      2. 打开服务器,等待客户端 Socket 对象连接,然后返回客户端 Socket 对象。

      3. 通过客户 Socket 对象获取客户输入流,以便从客户端端接收数据。

      4. 利用客户输入流从流中获取数据。

      5. 为获得客户反馈,利用客户 Socket 对象获取客户产出流。

      第六,使用客户的输出流在流中插入数据。

      7,关闭流资源

      本文由 在线网速测试 整理编辑,转载请注明出处。

          热门文章

          文章分类