首页 > 编程语言 >小新学Java17-【网络编程】

小新学Java17-【网络编程】

时间:2022-12-10 21:46:15浏览次数:43  
标签:Java17 Socket 对象 编程 网络 新学 服务器 接字 客户端

一、网络编程入门

1.1软件结构

 

 

两种架构各有优势,但是无论哪种架构,都离不开网络的支持。网络编程,就是在一定的协议下,实现两台计算机的通信的程序。

1.2网络通信协议

网络通信协议∶通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵守交通规则一样。在计算机网络中,这些连接和通信的规则被称为网络通信协议,它对数据的传输格式、传输速率、传输步骤等做了统一规定,通信双方必须同时遵守才能完成数据交换。

TCP/IP协议︰传输控制协议/因特网互联协议( Transmission Control Protocol/nternet Protocol),是Internet最基本、最广泛的协议。它定义了计算机如何连入因特网,以及数据如何在它们之间传输的标准。它的内部包含一系列的用于处理数据通信的协议,并采用了4层的分层模型,每一层都呼叫它的下一层所提供的协议来完成自己的需求。

1.3协议分类

TCP∶传输控制协议(Transmission Control Protocol)。TCP协议是面向连接的通信协议,即传输数据之前,在发送端和接收端建立逻辑连接,然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输。
在TCP连接中必须要明确客户端与服务器端,由客户端向服务端发出连接请求,每次连接的创建都需要经过"三次握手”。
三次握手∶TCP协议中,在发送数据的准备阶段,客户端与服务器之间的三次交互,以保证连接的可靠。
  第一次握手,客户端向服务器端发出连接请求,等待服务器确认。
  第二次握手,服务器端向客户端回送一个响应,通知客户端收到了连接请求。
  第三次握手,客户端再次向服务器端发送确认信息,确认连接。整个交互过程如下图所示。

完成三次握手,连接建立后,客户端和服务器就可以开始进行数据传输了。由于这种面向连接的特性,TCP协议可以保证传输数据的安全,所以应用十分广泛,例如下载文件、浏览网页等。

1.4网络编程三要素

协议

IP地址

IP地址:指互联网协议地址 ( Internet Protocol Address ),俗称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个字节一组,分成8组十六进制数,表示成ABCD:EF01;:2345:6789:ABCD:EF01:2345:6789,号称可以为全世界的每一粒沙子编上一个网址,这样就解决了网络地址资源数量不够的问题。

端口号

 

 

 

二、TCP通信程序

2.1概述

2.2 Socket类

TCP通信的客户端:向服务器发送连接请求,给服务器发送数据,读取服务器回写的数据
表示客户端的类:
java.net.Socket:此类实现客户端套接字(也可以就叫“套接字”)。套接字是两台机器间通信的端点。
套接字:包含了IP地址和端口号的网络单位

构造方法:
Socket(String host, int port)创建一个流套接字并将其连接到指定主机上的指定端口号。
参数:
string host:服务器主机的名称/服务器的IP地址
int port:服务器的端口号

成员方法:
OutputStream getOutputStream ()返回此套接字的输出流。
InputStream getInputStream()返回此套接字的输入流。
void close()关闭此套接字。

实现步骤:
1.创建一个客户端对象Socket,构造方法绑定服务器的IP地址和端口号
2.使用socket对象中的方法getOutputStream()获取网络字节输出流outputStream对象
3.使用网络字节输出流OutputStream对象中的方法write,给服务器发送数据
4.使用socket对象中的方法getInputStream()获取网络字节输入流InputStream对象
5.使用网络字节输入流InputStream对象中的方法read,读取服务器回写的数据
6.释放资源(Socket)

注意:
1.客户端和服务器端进行交互,必须使用Socket中提供的网络流,不能使用自己创建的流对象
2.当我们创建客户端对象Socket的时候,就会去请求服务器和服务器经过3次握手建立连接通路
这时如果服务器没有启动,那之就会抛出异常
如果服务器已经启动,那么就可以进行交互了

2.4简单的TCP网络程序

TCP通信分析图解

客户端向服务器发送数据

TCP通信的客户端:向服务器发送连接请求,给服务器发送数据,读取服务器回写的数据
表示客户端的类:
java.net.Socket:此类实现客户端套接字(也可以就叫“套接字”)。套接字是两台机器间通信的端点。
套接字:包含了IP地址和端口号的网络单位

构造方法:
Socket(String host, int port)创建一个流套接字并将其连接到指定主机上的指定端口号。
参数:
string host:服务器主机的名称/服务器的IP地址
int port:服务器的端口号

成员方法:
OutputStream getOutputStream ()返回此套接字的输出流。
InputStream getInputStream()返回此套接字的输入流。
void close()关闭此套接字。

实现步骤:
1.创建一个客户端对象Socket,构造方法绑定服务器的IP地址和端口号
2.使用socket对象中的方法getOutputStream()获取网络字节输出流outputStream对象
3.使用网络字节输出流OutputStream对象中的方法write,给服务器发送数据
4.使用socket对象中的方法getInputStream()获取网络字节输入流InputStream对象
5.使用网络字节输入流InputStream对象中的方法read,读取服务器回写的数据
6.释放资源(Socket)

注意:
1.客户端和服务器端进行交互,必须使用Socket中提供的网络流,不能使用自己创建的流对象
2.当我们创建客户端对象Socket的时候,就会去请求服务器和服务器经过3次握手建立连接通路
这时如果服务器没有启动,那之就会抛出异常ConnectException: Connection refused: connect
如果服务器已经启动,那么就可以进行交互了

服务器向客户端回写数据

TCP通信的服务器端:接收客户端的请求,读取客户端发送的数据,给客户端回写数据表示服务器的类;
java.net.ServerSocket:此类实现服务器套接字。

构造方法:
ServerSocket(int port)创建绑定到特定端口的服务器套接字。

服务器端必须明确一件事情,必须的知道是哪个客户端请求的服务器
所以可以使用accept方法获取到请求的客户端对象Socket

成员方法:
socket accept()侦听并接受到此套接字的连接。

服务器的实现步骤:
1.创建服务器ServerSocket对象和系统要指定的端口号
2.使用ServerSocket对象中的方法accept,获取到请求的客户端对象Socket
3.使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象
4.使用网络字节输入流InputStream对象中的方法read,读取客户端发送的数据
5.使用socket对象中的方法getOutputStream()获取网络字节输出流OutputStream对象
6.使用网络字节输出流OutputStream对象中的方法write ,给客户端回写数据
7.释放资源(Socket, ServerSocket)

三、综合案例

3.1文件上传案例

文件上传分析图解

基本实现

文件上传优化分析

优化实现

信息回写分析图解

回写实现

3.2模拟B\S服务器

案例分析

案例实现

访问效果

标签:Java17,Socket,对象,编程,网络,新学,服务器,接字,客户端
From: https://www.cnblogs.com/shuxin1125/p/16971557.html

相关文章

  • python操作数据编程
    支持数据库类型:Mysql,Oracle,SQLServerRedis,memcached连接Mysql数据库pipinstallpymysql流程:1、创建数据库连接2、基于数据库连接创建游标cursor  1)向数据库服务器......
  • delphi D11编程语言手册 学习笔记(P393-419) 对象与内存
      这本书可以在Delphi研习社②群256456744的群文件里找到.书名:Delphi11AlexandriaEdition.pdf 这些年来,Delphi行动装置编译器提供了一个不同的内存模式,称......
  • 小新学Java16-【缓冲流、转换流、序列化流】
    一、缓冲流1.1概述缓冲流,也叫高效流,是对4个基本的Filexxx流的增强,所以也是4个流,按照数据类型分类︰字节缓冲流︰BufferedInputStream,BufferedoutputStream字符......
  • Java网络编程总结
    一.网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输。在TCP/IP协议中IP层主要负责网络主机的定位,......
  • 【matlab编程基础】matlab的一些编程操作
    前言 基本操作1.matlab中如何使用类似字典的方式进行​​键值操作​​;ids=[0123456];names={'Unknown','Round','Left','Right','Uturn','Bicycle','Pede......
  • Day7 - 面向对象编程进阶
    本节内容:面向对象高级语法部分经典类vs新式类静态方法、类方法、属性方法类的特殊方法反射异常处理Socket开发基础作业:开发一个支持多用户在线的FTP程序 1.经典类......
  • 教你几个 Java 编程中的奇技淫巧
    枯燥的编程中总得有些乐趣,今天我们不谈论那些高深的技能,教你几个在编程中的奇技淫巧,说不定在某些时候还能炫耀一番呢。1、找到最大值和最小值不使用ifelseswitch和三......
  • Python:多进程并行编程与进程池
    Python的并行编程可以采用multiprocessing或mpi4py模块来完成。multiprocessing是Python标准库中的模块,实现了共享内存机制,也就是说,可以让运行在不同处理器核心的进程能读......
  • C++日期和时间编程总结
    在C++11之前,C++编程只能使用C-style日期时间库,其精度只有秒级别,这对于有高精度要求的程序来说,是不够的。但这个问题在C++11中得到了解决,C++11中不仅扩展了......
  • 极客编程python入门-匿名函数
    当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便。在Python中,对匿名函数提供了有限支持。>>>list(map(lambdax:x*x,[1,2,3,4,5,6,7,8......