Java的网络编程

网络:将不同区域的计算机连接到一起, 局域网,城域网,互联网

软件结构:

c/s结构:Client/Server

b/s结构:Browser/Server

网络编程,就是在一定的协议下,实现两台计算机的通信程序。

网络通信协议:在计算机网络中,连接和通信的规则被称为网络通信协议。它对数据的传输格式,传输速率,传输步骤都做了同意规定,通信双方必须同时遵守才能完成数据交换。

TCP/IP协议:传输控制协议/因特网互联协议。是Internet最基本、最广泛的协议。它定义了计算机如何连入因特网,以及数据传输的标准。采用4层分层模型。每一层都呼叫它的下一层所提供的协议来完成自己的需求。

 

协议分类:UDP:User Datagram Protocol。UDP是无连接通信协议。耗资小,通信效率高。

特点:数据被限制在64kb以内,超出这个范围就不能发送了。

TCP:传输控制协议(Transmission control Protocol)TCP是面向连接的通信协议。

每次连接要三次握手,断开时要四次挥手。

网络编程三要素:协议,IP地址,端口号

IPV4:四个字节,32位的二进制,a.b.c.d

IPV6:16个字节,128位的二进制,每16个字节一组,分成8组十六进制数。

 

常用命令:ipconfig:显示IP的配置信息。

ping 空格 IP地址:ping地址,检查网络是否联通。

端口号:用两个字节表示。一共有65535个。1024之前的端口号已经被系统分配给已知的网络软件。端口号不能重复。

常用的端口号:

1.80端口,网络端口

2.数据库:mysql:3306,oracle:1521

3.Tomcat服务器:8080

 

TCP通信程序:

Java中提供两个类实现TCP通信程序:

1.客户端:java.net.Socket

2.服务的:java.net.ServerSocket

 

TCP通信:面向连接的通信,客户端和服务器必须通过3此握手,建立逻辑连接,才能通信。

两端通信时步骤:

1.服务器程序,需要事先启动,等待客户端的连接。

2.客户端主动连接服务器端,连接成功才能通信。服务器不可用主动连接客户端。

3.这个连接包含一个对象,这个对象就是IO对象,客户端和服务端就可以使用。IO对象进行通信,通信的数据不仅仅是字符,所以IO对象是字节流对象。

 

 

实现步骤:

1.创建一个客户端对象Socket,构造方法绑定服务器的IP地址和端口号

2.使用对象中的getOutputStream()获取网络字节输出流Output Stream对象。

3.使用输出流是write,给服务器发送数据。

4.使用getInputStream()获取输入流对象InputStream。

5.使用input Stream对象的read,读取服务器回写的数据。

6.释放资源socket

注意:

1.客户端和服务端进行交互必须使用Socket中提供的网络流,不能自己创建。

2.必须服务端启动,客户端才能通过三次握手,连上服务端,否则会抛出异常。

 

TCP通信文件上传案例:

客户端读取本地的文件,把文件上传到服务器,服务器再把上传的文件保存到服务器的硬盘上

1.客户端使用本地的字节输入流,读取要上传的文件。

2.客户端使用网络字节输出流,把读取到文件上传到服务器

3.服务器使用网路字节输入流,读取客户端上传的文件。

4.服务器使用本地的字节输出流,把读取到的文件,保存到服务器的硬盘上。

5.服务器使用网路字节输出流,给客户端回写一个上传成功。

6.客户端使用网络字节输入流,读取服务器回写的数据。

7.释放资源。

注意:

客户端和服务器和本地硬盘进行读写,需要使用自己创建的字节流对象(本地流)

客户端和服务器之间进行读写,必须使用socket提供的字节流对象。

文件上传,就是文件复制

明确:

数据源: E:\\超人妈妈.apk

数据目的地: 服务器

实现步骤:

1.创建一个本地字节输入流FileInputStream对象,构造方法中绑定要读取的数据源。

2.创建一个客户端Socket对象,构造方法中绑定服务器IP地址和端口号

3.使用socket对象的get方法,得到网络字节输出输入流对象。

4.使用本地字节输入流对象的read方法,读取本地文件。

5.使用网络字节输出流把读取到的文件上传到服务器上。

6.使用网路字节输入流中的read方法读取服务器回写的数据。

7.释放资源,本地流对象关闭,socket对象关闭。

 

明确:

数据源:客户端上传的文件

目的地:服务器硬盘上

实现步骤:

1.创建一个服务器Server Socket对象,和系统要指定的端口号

2.使用ServerSocket对象中的方法accept,获取请求客户端是Socket对象

3.使用Sokect对象中的方法getInputStream,获取到网路字节输入流InputStream对象。

4.判断d:\\upload文件夹是否存在,不存在则创建。

5.创建一个文帝字节输出流FileOutputStream对象,构造方法中绑定要输出的目的地。

6.使用网路输入流对象的read方法,读取客户端上传的文件。

7.使用本地输出流对象的write,方法,把读取到的文件保存到服务器的硬盘上

8.获取网络字节输出流对象,write方法给客户端回写--上传成功

9.释放资源 FileOutputStream,socket,ServerSocket

 

文件上传阻塞的问题:文件的结束标记读取不到,就会进入到阻塞状态,一直死循环等待结束标记。

解决方案:上传完文件,给服务器写一个结束标记。

void shutdownOutput()禁用此套接字,任何以前写入的数据都会被发送,并且后TCP的正常连接终止序列。

 

文件上传优化:文件命名,循环接收,多线程提高效率

1.while(true),让服务器一直在接收socket

2.使用多线程技术。

 

模拟BS服务器

http://127.0.0.1:8080/p/web/index.html

 

GET /day01-code/web/index.html HTTP/1.1

Host: 127.0.0.1:8080

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8

Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2

Accept-Encoding: gzip, deflate

Connection: keep-alive

Upgrade-Insecure-Requests: 1

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值