《PHP》课件模块九网络编程.pptx
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《《PHP》课件模块九网络编程.pptx》由用户(momomo)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PHP PHP课件模块九 网络编程 课件 模块 网络 编程
- 资源描述:
-
1、计算机网络20世纪60年代出现,经历了20世纪70年代、80年代和90年代的发展,进入21世纪后,计算机网络已经成为信息社会的基础设施,深入到人类社会的方方面面,与人们的工作、学习和生活息息相关。计算机网络是通过传输介质、通信设施和网络通信协议,把分散在不同地点的计算机设备互连起来的,实现资源共享和数据传输的系统。网络编程,就是在一定的协议下,实现多台设备(计算机)之间通信的程序。Java语言对网络编程提供了良好的支持。通过其提供的接口我们可以很方便地进行网络编程。本模块通过“文件上传”案例介绍网络编程的过程。模块介绍思维导图教学大纲能力目标能力目标能够编写TCP协议下的数据传输程序知识目标知
2、识目标了解网络通信协议理解TCP和UDP的协议特点掌握IP地址和端口号的作用熟悉TCP协议下两个JDK常用类的使用掌握TCP通信的基本实现学习重点学习重点TCP通信的应用TCP通信程序的实现学习难点学习难点TCP通信“三次握手”过程TCP通信程序的实现任务任务9.1 9.1 文件上传程序设计文件上传程序设计任务目标任务目标u了解网络通信协议;u理解TCP和UDP的协议特点;u理解TCP协议下文件上传过程;u实现TCP协议下文件传输程序。任务任务9.1 9.1 文件上传程序设计文件上传程序设计网盘是由互联网公司推出的在线存储服务,它已经融入了人们的日常生活中。人们在利用网盘上传资料时,实际上是一
3、个使用客户端读取本地文件,把文件上传到服务器,服务器再把上传的文件保存到服务器硬盘上的过程。本节要求了解网络通信的基本原理,编写使用TCP网络通信程序,实现将客户端的“c:1.jpg”文件上传至服务器端的硬盘“d:upload”中。任务描述任务描述任务任务9.1 9.1 文件上传程序设计文件上传程序设计9 9.1.1.1.1网络通信协议网络通信协议9 9.1.1.1.11.1网络通信协议概述网络通信协议概述 要实现多台计算机之间的通信,需要遵守一定的规则,如同人与人之间相互交流是需要遵循一定的规矩一样,计算机之间能够进行相互通信是因为它们都共同遵守一定的规则,即网络通信协议。协议(protoc
4、ol)是定义计算机如何通信的一组明确的规则,包括地址格式、数据如何分包等。针对网络通信的不同方面,定义有很多不同的协议,如HTTP、FTP、TCP协议等。知识准备知识准备任务任务9.1 9.1 文件上传程序设计文件上传程序设计 通过网络发送数据是一项复杂的操作,必须仔细地协调网络的物理特性以及所发送数据的路径特征。为了对应用程序开发人员和最终用户隐藏这种复杂性,网络通信的不同方面被分解为多个层。每一层表示为物理硬件(即线缆和电流)与所传输信息之间的不同抽象层次。在理论上,每一层只与紧挨其上和其下的层对话。将网络分层,这样就可以修改甚至替换某一层的软件,只要层与层之间的接口保持不变,就不会影响到
5、其他层。TCP/IP协议(Transmission Control Protocol/Internet Protocol,传输控制协议/因特网互联协议)是Internet最基本、最广泛的协议。它定义了计算机如何连入因特网,以及数据如何在它们之间传输的标准。它的内部包含一系列的用于处理数据通信的协议,并采用了4层的分层模型,每一层都呼叫它的下一层所提供的协议来完成自己的需求,如图9-1所示。任务任务9.1 9.1 文件上传程序设计文件上传程序设计 图9-1中,TCP/IP协议中的四层分别是应用层、传输层、网络层和链路层,每层分别负责不同的通信功能。链路层是用于定义物理传输通道,通常是对某些网络连
6、接设备的驱动协议,例如针对光纤、网络提供的驱动。网络层是整个TCP/IP的核心,它主要用于将传输的数据进行分组,将分组数据发送到目标计算机或者网络。传输层主要使网络程序进行通信,在进行网络通信时,可以采用TCP协议,也可以采用UDP协议。应用层主要负责应用程序的协议,例如HTTP协议、FTP协议等。图9-1 TCP/IP网络模型在JDK中提供了包用于专注网络程序开发,包中提供了两种常见的网络协议支持,分别是TCP和UDP。任务任务9.1 9.1 文件上传程序设计文件上传程序设计9 9.1.1.1.21.2TCPTCP协议协议 TCP(Transmission Control Protocol)
7、全称是传输控制协议,是一种面向连接的通信协议,即传输数据之前,在发送端和接收端建立逻辑连接,然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输。在TCP协议中,在发送数据的准备阶段,客户端与服务器之间的三次交互,以保证连接的可靠,这三次交互被称为“三次握手”。“三次握手”的具体过程如下:第一次握手,客户端向服务器端发出连接请求,等待服务器确认。第二次握手,服务器端向客户端回送一个响应,通知客户端收到了连接请求。第三次握手,客户端再次向服务器端发送确认信息,确认连接。整个交互过程如图9-2所示。任务任务9.1 9.1 文件上传程序设计文件上传程序设计 完成三次握手,连接建立之后,客户端和
8、服务器就可以进行数据传输了。由于面向连接的特性,TCP协议可以保证传输数据的安全,所以应用十分广泛,例如下载文件、浏览网页等。图9-2 TCP协议通信“三次握手”任务任务9.1 9.1 文件上传程序设计文件上传程序设计9 9.1.1.1.31.3UDPUDP协议协议 UDP(User Datagram Protocol)全称是用户数据报协议,是一种面向无连接的协议,即在使用UDP协议传输数据时,数据的发送端和接收端不需要建立逻辑连接。简单的说,就是当一台计算机向另一台计算机发送数据时,发送端不会确认接收端是否存在,可以直接将数据、数据源和目的地都封装在数据包中发送出去。同样接收端在收到数据时,
9、也不会向发送端反馈是否收到数据。和TCP不同的是,UDP不需要在发送数据前进行三次握手建立连接,只要想发数据就可以发送数据,只是数据的搬运工,不会对数据报文进行任何拆分和拼接操作。任务任务9.1 9.1 文件上传程序设计文件上传程序设计 正由于无连接性,UDP不能保证数据的完整性,具有不可靠性。另外,UDP没有拥塞控制,一直会以恒定的速度发送数据,即使网络条件不好,也不会对发送速率进行调整,那么在网络条件不好的情况下可能产生丢包,因此在传输重要数据时不建议使用UDP协议,以免丢失重要数据。但是其优点也很明显,使用UDP协议消耗的资源小,每个数据包的大小限制在64k以内,通信效率高,所以通常会用
10、于音频、视频这些实时性要求高的场景。例如视频会议、群聊天等这些即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响的应用。任务任务9.1 9.1 文件上传程序设计文件上传程序设计TCPTCPUDPUDP是否连接是否连接面向连接无连接是否可靠是否可靠可靠传输,使用流量控制和塞控制不可靠传输,不使用流量控制和塞控制对象数量对象数量只支持一对一通信支持一对一,一对多,多对一和多对多交互通信适用场景适用场景适用于要求可靠传输的应用,如文件传输适用于实时应用,如IP电话、视频会议、直播等表9-1 TCP和UDP的对比任务任务9.1 9.1 文件上传程序设计文件上传程序设计9 9.1.1.1.41.4I
11、PIP地址和端口号地址和端口号 在Java中,网络编程需要掌握三个要素,除了协议以外,还有IP地址和端口号。网络的通信,本质上是两个进程(应用程序)的通信。“协议+IP地址+端口号”三元组合可以标识网络中的进程,那么进程就可以利用这个标识与其它进程进行交互。IP地址是Internet Protocol Address的简写,指的是互联网协议地址,用来给一个网络中的计算机设备做唯一的编号。假如我们把“个人电脑”比作“一台电话”的话,那么“IP地址”就相当于“电话号码”。IP地址分为IPv4和IPv6。IPv4是一个32位的二进制数,通常被分为4个字节,表示成a.b.c.d的形式,例如192.16
12、8.65.100。其中a、b、c、d都是0255之间的十进制整数,那么最多可以表示42亿个。由于互联网的蓬勃发展,互联网对IP地址的需求量愈来愈大,但是网络地址资源有限,使得IP的分配越发紧张。为了扩大地址空间,拟通过IPv6重新定义地址空间,采用128位地址长度,每16个字节一组,分成8组十六进制数,表示成ABCD:EF01:2345:6789:ABCD:EF01:2345:6789,以解决了网络地址资源数量不够的问题。任务任务9.1 9.1 文件上传程序设计文件上传程序设计 如果说IP地址可以唯一标识网络中的设备,那么端口号就可以唯一标识设备中的进程(应用程序)了。端口号是一个逻辑端口,它
13、用两个字节表示的整数,取值范围是065535。每当打开一个网络软件,操作系统都会为网络软件分配一个随机的或者是系统要指定的端口号。01023之间的端口号都已经被用于一些知名的网络服务和应用,普通的应用程序需要使用1024以上的端口号。如果端口号被另外一个服务或应用所占用,会导致当前程序启动失败。任务任务9.1 9.1 文件上传程序设计文件上传程序设计9 9.1.1.2 2TCPTCP通信程序设计通信程序设计 TCP通信能实现两台计算机之间的数据交互,TCP连接时必须明确服务器端(Server)与客户端(Client)。两端通信时,服务端程序需要事先启动,它不可以主动连接客户端,只能等待客户端的
14、连接。然后客户端主动连接服务器端,连接成功才能通信。连接过程中包含一个IO字节流对象,客户端和服务端就用这个IO流对象进行通信。需要注意的是,当多个客户端同时和服务端交互时,服务端必须明确和哪个客户端进行交互,并且需要使用多个IO流对象。Java在net包中提供了两个类用于实现TCP通信程序。任务任务9.1 9.1 文件上传程序设计文件上传程序设计 (1)表示服务端的类:.ServerSocket类表示。该类实现了服务器套接字,套接字指的是两台设备之间通讯的端点。创建ServerSocket对象,相当于开启一个服务,该对象等待通过网络的请求,也就是等待客户端的连接。ServerSocket类的
15、主要构造方法和成员方法如表9-2所示。表9-2 ServerSocket类的主要构造方法和成员方法方法声明功能描述public ServerSocket(int port)使用该构造方法在创建ServerSocket对象时,就可以将其绑定到一个指定的端口号上,参数port就是端口号。public Socket accept()侦听并接受连接,返回一个新的Socket对象,用于和客户端实现通信。该方法会一直阻塞直到建立连接。任务任务9.1 9.1 文件上传程序设计文件上传程序设计 (2)表示客户端的类:.Socket类表示。该类实现客户端套接字。创建Socket对象,向服务端发出连接请求,服务端
16、响应请求,两者建立连接开始通信。Socket类的主要构造方法和成员方法如表9-3所示。表9-3 Socket类的主要构造方法和成员方法方法声明功能描述public Socket(String host,int port)创建套接字对象并将其连接到指定主机上的指定端口号。如果指定的host是null,则相当于指定地址为回送地址。public InputStream getInputStream()返回此套接字的输入流。关闭生成的InputStream也将关闭相关的Socket。public OutputStream getOutputStream()返回此套接字的输出流。关闭生成的OutputS
17、tream也将关闭相关的Socket。public void close()关闭此套接字。一旦一个socket被关闭,它不可再使用。关闭此socket也将关闭相关的InputStream和OutputStream。public void shutdownOutput()禁用此套接字的输出流。任何先前写出的数据将被发送,随后终止输出流。任务任务9.1 9.1 文件上传程序设计文件上传程序设计 从通信逻辑上来看,TCP网络通信的两端程序编写主要步骤如下:服务端启动,创建ServerSocket对象,指定端口号,等待连接。客户端启动,创建Socket对象,构造方法绑定服务器的IP地址和端口号,请求连
18、接。服务端接收连接,调用ServerSocket对象中的accept()方法,返回请求的客户端对象Socket。客户端使用Socket对象的getOutputStream()方法获取网络字节输出流OutputStream对象,然后使用网络字节输出流OutputStream对象中的write()方法,给服务器发送数据。服务端使用Scoket对象的getInputStream()方法获取网络字节输入流InputStream对象,然后使用网络字节输入流InputStream对象中的read()方法,读取客户端发送的数据。到此,客户端向服务端发送数据成功,接下来服务端向客户端回写数据。任务任务9.1
19、9.1 文件上传程序设计文件上传程序设计服务端使用Socket对象中的getOutputStream()方法获取网络字节输出流OutputStream对象,然后使用网络字节输出流OutputStream对象中的write()方法,给客户端回写数据。客户端使用Scoket对象的getInputStream()方法获取网络字节输入流InputStream对象,然后使用网络字节输入流InputStream对象中的read()方法,读取服务端回写的数据。客户端释放Socket资源,断开连接。服务端释放Socket和ServerSocket资源。图9-3 TCP网络通信逻辑图任务任务9.1 9.1 文件
20、上传程序设计文件上传程序设计 需要注意的是,客户端和服务端交互时必须使用Socket中提供的网络流,不允许使用自己创建的流对象。当创建客户端对象Socket的时候,就会主动请求服务器,要求经过3次握手建立连接通路。如果此时服务器没有启动,则会抛出连接被拒绝的异常(ConnectException:Connection refused:connect);如果服务器已经启动,那么交互就可以顺利进行了。任务任务9.1 9.1 文件上传程序设计文件上传程序设计 接下来用一个案例来演示TCP网络通信程序的编写过程,服务器端程序如例9-1所示,客户端程序如例9-2所示。import java.io.*;i
21、mport .*;public class Example9_1 public static void main(String args)throws IOException /1.创建ServerSocket对象,绑定端口,开始等待连接。ServerSocket server=new ServerSocket(8888);/2.接收连接,使用accept方法,返回socket对象。Socket socket=server.accept();/3.通过socket 获取输入流 InputStream is=socket.getInputStream();/4.一次性读取数据/4.1 创建字节数
22、组 byte bytes=new byte1024;/4.2 将数据读取到字节数组中 int len=is.read(bytes);/4.3 解析数组,打印字符串信息 System.out.println(new String(bytes,0,len);例例9-1 9-1 ExampleExample9 9_ _1.java1.java任务任务9.1 9.1 文件上传程序设计文件上传程序设计/*-服务端回写数据-*/5.通过socket获取输出流 OutputStream os=socket.getOutputStream();/6.回写数据 os.write(收到,谢谢.getBytes()
23、;/7.关闭资源 socket.close();server.close();例例9-1 9-1 ExampleExample9 9_ _1.java1.java任务任务9.1 9.1 文件上传程序设计文件上传程序设计import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import .Socket;public class Example9_2 public static void main(String args)throws IOException /1.创建Socket(ip,
展开阅读全文