java学习day22(网络编程)网络编程

      最后更新:2022-06-24 16:47:49 手机定位技术交流文章

      今日重点:

      • 软件架构CS/BS

      • 网络通信三要素

      • TCP通信

      • Socket套接字

      • ServerSocket

      文章索引:

      网络编程入门

      软件结构

      网络通信协议

      协议分类

      网络编程三要素

      协议

      IP地址

      端口号

      TCP通信程序

      概述

      综合案例

      文件上传案例

      文件上传案例阻塞问题

      文件上传优化分析

      仿真BS服务器(扩展知识点)

      网络编程入门

      软件结构

      C/S结构称为Client/Server结构,是指客户端和服务器结构。 常见的软件包括QQ、Xunray和其他软件。

      B/S结构被称为“浏览器/服务器结构”,它指的是浏览器和服务器结构。

      网络编程是一种在某些协议下实现两个计算机之间的通信的程序。

      网络通信协议

      • 网络通信协议: 计算机网络可以连接多个计算机.一个位于同一网络的计算机在连接和通信时必须遵守某些规则,就像开车在路上遵守交通规则一样。在计算机网络中,这些连接和通信规则被称为网络通信协议.对数据传输格式、传输速度、传输步骤等均有统一的规定;为了完成数据交换,双方必须同时遵守。

      • TCP/IP协议:传输控制协议/互联网协议,它是最基本和广泛的互联网协议。它定义了计算机如何连接到互联网,和数据的传输方法的标准。它包含一系列处理数据通信的协议,采用了四层模型.每个层要求其下层提供协议以满足其需要。

      在上述图中,TCP/IP协议的四个层是应用程序层、传输层、网络层和链接层,每个层负责不同的通信功能。

      链层:链层用于定义物理传输通道,通常是某些网络连接设备的驱动协议,例如为光纤和网络线提供的协议。

      网络层: 网络层是整个TCP/IP协议的核心,主要用于将传输的数据分组并发送分组数据到目标计算机或网络。

      传输层:主要允许网络程序通信,在通信时可以使用TCP协议或UDP协议。

      应用程序层:主要负责应用程序协议,如HTTP协议、FTP协议等。

      协议分类

      通讯协议仍然更加复杂,java.net软件包中包含的类和接口提供了低级的通信细节,我们可以直接使用这些类和接口,而不考虑通信的细节,集中开发网络程序。

      java.net该包提供支持两个共同的网络协议:

      • UDP: 用户数据图协议.UDP是一个不连接的通信协议,即在数据传输时,数据的发送者和接收者不建立逻辑连接.简单来说,当一个计算机向另一个发送数据时,发送者不会确认接收者的存在,就会发出数据,当同一接收器接收数据时,无论数据是否收到,它将无法返回发送器。

        由于UDP协议的资源消耗低和通信效率高,UDP协议通常用于传输音频、视频和像视频会议这样的普通数据,因为这对接收结果没有显著的影响,即使你偶尔丢失一两个数据包。

        然而,当使用UDP协议传输数据时,由于UDP不面向连接,不能保证数据完整,因此在传输重要数据时,不建议使用UDP协议。

      特点: 数据仅限于64kb,不能超过此限度.

      数据图:网络传输的基本单元

      • TCP: 传输控制协议.TCP协议是一种面向连接的通信协议,即传输数据之前,建立传送器与接收器之间的逻辑连接,然后再传输数据,它提供了两个计算机之间的可靠和无误的数据传输.

        在TCP连接中,客户端和服务器必须清楚地标识,客户端向服务器发送连接请求,每个连接创建需要“三个手”。

        • 三个握手:在TCP协议中,在发送数据的准备阶段,客户端和服务器之间进行三个握手,以确保连接的可靠性。

          • 第一次握手时,客户端向服务器发送连接请求并等待服务器确认。

          • 第二次握手将发送回客户端的响应,通知客户端已收到连接请求。

          • 第三个握手,客户端再次向服务器发送确认消息,确认连接。

      在完成三个握手后,连接被建立,客户端和服务器可以开始传输数据。 由于这种面向连接的特性,TCP协议可以保证数据传输的安全性,并广泛用于下载文件、浏览网页等。

      网络编程三要素

      协议

      • 议定书: 在计算机网络通信中必须遵守的规则已经引入, 不再提议了.

      IP地址

      • IP地址:指互联网协议地址,俗称IP。IP地址用于网络中独特的编码计算机设备。如果我们把个人电脑和电话比起来,因此IP地址与电话号码相符。

      IP地址分类

      • IPv4:是一个32位二进制数,通常分为4字节,代表为a.b.c.d的形式,例如192.168.65.100.其中,a、b、c和d是0到255之间的十进制整数,因此最多可代表42亿。

      • IPv6:由于互联网的蓬勃发展,对IP地址的需求正在增加,但网络地址资源有限,使得IP的分布日益紧张。

        为了扩大地址空间,建议通过IPv6重新定义地址空间,使用128位地址长度,每16字节1组,分成8组16英寸系数,代表为ABCD:EF01:2345:6789:ABCD:EF01:2345:6789..

      常用命令

      • 检查主机的IP地址,并在控制面板中输入:

      ipconfig

      • 检查网络是否连接,并进入控制面板:

      ping vault IP地址

      ping 220.181.57.216

      特殊的IP地址

      • 本机IP地址:127.0.0.1localhost

      端口号

      网络通信基本上是两个进程(应用程序)的通信。 每个计算机都有多种进程,那么在网络中通信时,我们如何区分这些进程?

      如果IP地址只能识别网络中的设备,那么端口号只能识别设备中的进程(应用程序)。

      • 端口数:由两个字符表示的整数,它的值范围为0–65535。其中,0到1023之间的端口号用于一些众所周知的网络服务和应用程序,普通应用程序需要使用超过1024的端口数。如果其他服务或应用程序使用端口号,这将导致当前程序无法启动。

      利用协议+IP地址+端口号三维组合可以识别网络中的进程,因此进程之间的通信可以使用这种识别来与其他进程交互。

      示意图:

      TCP通信程序

      概述

      TCP通信使两个计算机之间的数据交互,通信的两个端被严格分为客户端和服务器。

      两端通信时步骤:

      1. 服务端口程序需要先启动并等待客户端连接。

      2. 客户端主动连接到服务器端,并成功地通信。 服务器不能主动连接到客户端。

      在Java中,为实现TCP通信程序提供了两个类别:

      1. 客户端:java.net.Socket类表示。创建Socket向服务器发送连接请求的对象,服务器响应请求,这两个对象建立连接,开始通信。

      2. 服务端:java.net.ServerSocket类表示。创建ServerSocket对象相当于打开服务并等待客户端连接。

      示意图:

      实例代码:(客户)

      代码示例:(服务器结束)

      综合案例

      文件上传案例

      原理示例图:

      基本实现

      客户端实现:

      服务器端:

      文件上传案例阻塞问题

      示意图:

      文件上传优化分析

      1.写死文件名的问题

      在服务器上,保存的文件的名称,如果已写完,则最终导致服务器的硬盘,仅是一个文件,建议使用系统时间优化,只保证文件名,代码如下:

      FileOutputStream fis = new FileOutputStream (System."Current TimeMillis()+".jpg") // 文件名
      BufferedOutputStream bos = new BufferedOutputStream(fis);

      2.循环接收的问题

      服务结束,这意味着文件的保存被关闭,随后的用户无法再上传它。这并不现实。使用循环改进,您可以连续接收不同用户的文件,代码如下:

      //每次收到新的连接时创建一个插座
      while(true){
      Socket accept = serverSocket.accept();
      ......
      }

      3.效率问题

      当接收大文件时,服务终止,可能需要几秒,在此期间不能接收其他用户上传,因此,使用多线技术优化,代码如下:

      while(true){
      Socket accept = serverSocket.accept();
      // 接受子线程处理.
      new Thread(() -> {
      ......
      InputStream bis = accept.getInputStream();
      ......
      }).start();
      }

      优化后代码:

      (客户端)

      服务器端:

      仿真BS服务器(扩展知识点)

      示意图:

      代码实现:

      如果图片不正确显示,浏览器会分析服务器返回的HTML页面,如果页面中有一个图片,浏览器会打开单独的线程读取服务器的图片。我们将服务器保持在监控状态,客户端请求一次,服务器返回一次。

      根据需求修改代码:

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/28334.html

          热门文章

          文章分类