最后更新: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地址分类
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.1、localhost。
网络通信基本上是两个进程(应用程序)的通信。 每个计算机都有多种进程,那么在网络中通信时,我们如何区分这些进程?
如果IP地址只能识别网络中的设备,那么端口号只能识别设备中的进程(应用程序)。
端口数:由两个字符表示的整数,它的值范围为0–65535。其中,0到1023之间的端口号用于一些众所周知的网络服务和应用程序,普通应用程序需要使用超过1024的端口数。如果其他服务或应用程序使用端口号,这将导致当前程序无法启动。
利用协议+IP地址+端口号三维组合可以识别网络中的进程,因此进程之间的通信可以使用这种识别来与其他进程交互。
示意图:

TCP通信使两个计算机之间的数据交互,通信的两个端被严格分为客户端和服务器。
两端通信时步骤:
服务端口程序需要先启动并等待客户端连接。
客户端主动连接到服务器端,并成功地通信。 服务器不能主动连接到客户端。
在Java中,为实现TCP通信程序提供了两个类别:
客户端:java.net.Socket类表示。创建Socket向服务器发送连接请求的对象,服务器响应请求,这两个对象建立连接,开始通信。
服务端: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();
}
优化后代码:
(客户端)
服务器端:
示意图:

代码实现:
如果图片不正确显示,浏览器会分析服务器返回的HTML页面,如果页面中有一个图片,浏览器会打开单独的线程读取服务器的图片。我们将服务器保持在监控状态,客户端请求一次,服务器返回一次。
根据需求修改代码:
本文由 在线网速测试 整理编辑,转载请注明出处。