第10章网络编程教学课件.ppt





《第10章网络编程教学课件.ppt》由会员分享,可在线阅读,更多相关《第10章网络编程教学课件.ppt(41页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Java面向对象程序设计第10章 网络编程本章内容掌握网络编程的一些基础知识了解网络编程的原理掌握基于TCP协议的网络编程掌握基于udp协议的网络编程任务相关知识 网络编程指的就是通过网络进行程序数据操作,既然是网络开发,那么一定就分为用户和服务两端,而这两个端的开发实际上就有以下的两种不同的架构: C/S(Client / Server):要开发两套程序,一套是服务器端,另外一套是与之对应的客户端,但是这种程序在日后进行维护的时候,是需要维护两套程序,而且客户端的程序更新也必须及时,此类程序安全; B/S(Browser / Server):要开发一套程序,只开发服务器端的,客户端使用浏览器
2、进行访问,这种程序在日后进行程序维护的时候只需要维护服务器端即可,客户端不需要做任何的修改,此类程序使用公共端口,包括公共协议,所以安全性很差。 如果从网络的开发而言,大的分类是以上的两类,可是从现在的开发来讲,更多的情况是针对于B/S程序进行的开发,或者可以这么理解:B/S程序的开发属于网络时代,而C/S程序的开发属于单机时代。而对于WebService的开发,实话而言,也属于B/S结构的程序(跨平台)。 而在日后学习Android开发的时候,如果要考虑安全性使用Socket,如果要考虑方便性,还是基于WEB的开发方便使用。而对于网络的开发在Java中也分为两种:TCP(传输控制协议,可靠的
3、传输)、UDP(数据报协议),对于网络开发,本次只专注于TCP程序的实现。网络编程基础知识网络编程基础知识网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯。网络编程中有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输。在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机。而TCP层则提供面向应用的可靠的或非可靠的数据传输机制。目前较为流行的网络编程模型是客户机/服务器(C/S)结构,即通信双方一方作为服务器等待客户提出请求并予以响应。客户则在需要服务时向服务
4、器提出申请。服务器一般作为守护进程始终运行,监听网络端口,一旦有客户请求,就会启动一个服务进程来响应该客户,同时自己继续监听服务端口,使后来的客户也能及时得到服务。网络编程涉及到几个概念:通讯协议:通讯协议通讯协议:计算机网络中实现通讯必须遵循的一些约定,这些约定被称为通信协议。通信协议负责对传输速率、传输代码、代码结构、传输控制步骤、出错控制等制定处理标准。网络通讯协议有很多种,目前应用最广泛的使TCP/IP协议(Transmission Control Protocol/Internet Protocol)、UDP协议(User Datagram Protocol)、ICMP协议(Inte
5、rnet Control Message Protocol)和其他一些协议的协议组。本章涉及到TCP协议和UDP协议。TCP是传输控制协议,是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。客户端和服务器端每次建立数据连接都要经过“三次握手”。三次握手协议指的是在发送数据的准备阶段,服务器端和客户端之间需要进行三次交互:第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;第二次握手:服务器收到syn包,必须确认客户的syn(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服
6、务器进入SYN_RECV状态;第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。连接建立后,客户端和服务器就可以开始进行数据传输了。UDP是User Datagram Protocol(用户数据报协议)的简称,是一种无连接的、不可靠的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。但是这个协议的速度却比较快,所以在现在网络基础设施越来越好的情况下,使用UDP
7、协议的应用程序也越来越多了。IP地址表识Internet上的计算机。知道了网络中某一台主机的IP地址,就可以定位这台计算机,通过这种地址标识,网络中计算机可以相互定位和通讯,采用IPV4、IPV6两种格式。IP地址:地址:Port端口号端口号是计算机输入输出信息的接口,端口是网络通信时同一主机上的不同进程的标识,标识正在计算机上运行的进程(程序)。端口号被规定为一个16位的整数0-65535,其中,0-1023被预定义的服务通信占用,应该使用1024-65535这些端口中的某一个进行通信。每个程序监听本机上的一个端口套接字套接字Socket:套接字是用来描述IP地址和端口的,可以把它看成是一个
8、通信端点。Socket实际是传输层供给应用层的编程接口。Socket就是应用层与传输层之间的桥梁。使用Socket编程可以开发客户机和服务器应用程序,可以在本地网络上进行通信,也可通过Internet在全球范围内通信,Socket连接示意图如图10.1所示:创建客户端的socket的时候,socket=newSocket(“218:198:118:108”,80);Socket连接到ip地址是218:198:118:108,服务器端口80的服务器上。同时会自动生成一个本地端口号,该端口号和服务器端口号建立一条通信链路。套接字是由IP地址和端口号组成的,简单解释一下,假设你的电脑上有两个程序都在
9、运行,并且都从服务器端读取数据,一个是A,一个是B,现在A的服务器和B的服务器同时发送来数据,现在怎么判断接收到的网络数据是给哪一个程序使用的呢?这就是端口的作用了!每个程序监听本机上的一个端口,就可以从这个端口读取数据了!这样数据就不会混乱。本地端口号和服务器端端口号不一致。套接字套接字Socket:(续)(续)URL:protocol:/resourceName 协议名(protocol)指明获取资源所使用的传输协议,如http、ftp、gopher、file等,资源名(resourceName)则应该是资源的完整地址,包括主机名、端口号、文件名或文件内部的一个引用。例如:http:/ 协
10、议名:/主机名http:/ 协议名:/机器名文件名http:/:80/Gamelan/network.html#BOTTOM协议名:/机器名端口号文件名内部引用网络编程原理网络编程原理要实现网络机器间的通讯,首先得来看看计算机系统网络通信的基本原理,在底层层面去看,网络通信需要做的就是将流从一台计算机传输到另外一台计算机,基于传输协议和网络IO来实现,其中传输协议比较出名的有http、tcp、udp等等,http、tcp、udp都是在基于Socket概念上为某类应用场景而扩展出的传输协议,网络IO,主要有bio、nio、aio三种方式,所有的分布式应用通讯都基于这个原理而实现,只是为了应用的易
11、用,各种语言通常都会提供一些更为贴近应用易用的应用层协议。网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket。Socket通常用来实现客户方和服务方的连接。Socket是TCP/IP协议的一个十分流行的编程界面,一个Socket由一个IP地址和一个端口号唯一确定。但是,Socket所支持的协议种类也不光TCP/IP一种,因此两者之间是没有必然联系的。在Java环境下,Socket编程主要是指基于TCP/IP协议的网络编程。Java网络通讯原理:网络通讯原理:要实现网络机器间的通讯,首先得来看看计算机系统网络通信的基本原理,在底层层面去看,网络通信需要做
12、的就是将流从一台计算机传输到另外一台计算机,基于传输协议和网络IO来实现,其中传输协议比较出名的有http、tcp、udp等等,http、tcp、udp都是在为某类应用场景而定义出的传输协议,网络IO,主要有bio、nio、aio三种方式,所有的分布式应用通讯都基于这个原理而实现,只是为了应用的易用,各种语言通常都会提供一些更为贴近应用易用的应用层协议。TCP/IP服务器端应用程序是通过Java语言中提供的ServerSocket和Socket这两个有关网络的类来实现的。而ServerSocket类除了建立一个Server之外,还通过accept()方法提供了随时监听客户端连接请求的功能,它的
13、构造方法有以下两种。 ServerSocket(int port) ServerSocket(int port,int backlog) 其中port是指连接中对方的端口号,backlog则表示服务器端所能支持的最大连接数。下面的程序用来监听客户端应用程序建立连接的请求,并在连接建立后向客户端发送信息。Java中的网络通信时通过Socket实现的,Socket分为ServerSocket和Socket两大类,ServerSocket用于服务器端,可以通过accept方法监听请求,监听请求后返回Socket,Socket用于完成具体数据传输,客户端也可以使用Socket发起请求并传输数据。Ser
14、verSocket的使用可以分为三步:创建ServerSocket。ServerSocket的构造方法有5个,其中最方便的是ServerSocket(int port),只需要一个port就可以了。调用创建出来的ServerSocket的accept方法进行监听。accept方法是阻塞方法,也就是说调用accept方法后程序会停下来等待连接请求,在接受请求之前程序将不会继续执行,当接收到请求后accept方法返回一个Socket。使用accept方法返回的Socket与客户端进行通信TCP 是Tranfer Control Protocol 的 简称,是一种面向连接的保证可靠传输的协议。通过T
15、CP协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方的成对的两个socket之间必须建 立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送 或接收操作。基于基于TCP协议的网络编程协议的网络编程服务器端的步骤:服务器端的步骤:1、创建服务器端的ServerSocket对象,绑定监听端口2、调用accept()方法进行侦听客户端的请求,等待客户端的连接3、与客户端建立连接以后,通过输入流读取客户端发送的请求信息
16、4、通过输出流用来响应客户端5、关闭输入输出流以及socket等相应的资源客户端的步骤:1、创建socket对象,并且指明需要连接的服务器端的地址以及端口号,用来与服务器端进行连接2、连接建立后,获取一个输出流,通过输出流向服务器端发送请求信息3、通过输入流,读取服务器端响应的信息4、关闭相应的资源相关的类介绍相关的类介绍在Java的类库中,URL、URLConnection、Socket、ServerSocket类都是利用TCP在网络上通信的;而DatagramPacket和DatagramSocket类是使用UDP的。本章将主要讲述利用TCP协议进行通信的各个类。1、URL类:.URL,是
17、统一资源定位器,它是指向internet资源的指针。通过URL标识,就可以利用各种网络协议来获取远端计算机上的资源或信息,从而方便快捷地开发Internet应用程序。格式:传输协议名:/主机名:端口号/文件名#引用构造方法:表10.1常用方法:表10.2构造方法主要功能( spec)从 String表示形成一个 URL对象( context, spec)通过在指定的上下文中解析给定的规范来创建一个URL方法主要功能Object getContent()获取此URL的内容int getDefaultPort()获取与此URL关联协议的默认端口号String getFile()获取此 URL的文件
18、名String getHost()获取此 URL的主机名(如适用)String getPath()获取此 URL的路径部分int getPort()获取此 URL的端口号String getProtocol()获取此 URL的协议名称String getRef()获取此URL的锚点(也称为“引用”)URLConnection openConnection()它表示到URL所引用的远程对象的连接InputStream openStream()打开与此 URL ,并返回一个 InputStream ,以便从该连接读取【例10-1】:通过案例来掌握使用URL类获取远端主机上指定文件的内容:创建一个参
19、数为 http:/ java.io.*;import .URL;public class Demo10_01 public static void main(String args) throws Exception / 创建URL对象URL url = new URL(http:/ 创建InputStreamReader对象InputStreamReader is = new InputStreamReader(url.openStream();System.out.println(协议: + url.getProtocol(); / 显示协议名System.out.println(主机:
20、+ url.getHost(); / 显示主机名System.out.println(端口: + url.getDefaultPort(); / 显示与此 URL关联协议的默认端口号System.out.println(路径: + url.getPath(); / 显示路径名System.out.println(文件: + url.getFile(); / 显示文件名/ 创建BufferedReader对象BufferedReader br = new BufferedReader(is);String inputLine;System.out.println(文件内容:);/ 按行从缓冲输入
21、流循环读字符,直到读完所有行while (inputLine = br.readLine() != null) System.out.println(inputLine);/ 把读取的数据输出到屏幕上br.close();/ 关闭字符输入流该程序的运行结果:协议:http主机:端口:80路径:/index.html文件:/index.html文件内容:百度一下,你就知道文件内容太多,以下内容就此省略。URLConnection抽象类URLConnection是所有类的超类,它代表应用程序和 URL 之间的通信链接。此类的实例可用于读取和写入此 URL 引用的资源。构造方法:表10.3常用方法:
22、表10.4构造方法主要功能URLConnection(URL url)构造与指定URL的URL连接方法主要功能Object getContent()检索此URL连接的内容String getContentEncoding()返回 content-encoding标题字段的值Int getContentLength()返回 content-length标题字段的值String getContentType()返回 content-type标题字段的值URL getURL()返回此URLConnection的URL字段的值InputStream getInputStream()返回从此打开的连接读
23、取的输入流OutputStream getOutputStream()返回写入此连接的输出流public void setConnectTimeout(int timeout)设定一个指定的超时值(以毫秒为单位)【例10-2】:通过案例来掌握使用URLConnection类获取Web页面信息功能实现:使用URLConnection显示网址http:/ java.io.*;import .URL;import .URLConnection;public class Demo10_02 public static void main(String args) throws Exception St
24、ring s;/ 创建URL对象URL url = new URL(http:/ 定义URLConnection对象,并让其指向给定的连接URLConnection uc = url.openConnection();System.out.println(文件类型: + uc.getContentType();System.out.println(文件长度: + uc.getContentLength();System.out.println(文件内容: );System.out.println(-);/ 定义字节输入流对象,并使其指向给定连接的输入流BufferedReader is=new
25、 BufferedReader(new InputStreamReader(uc.getInputStream();/ 创建BufferedReader对象while (s = is.readLine() !=null) / 循环读下一个字节,直到文件结束System.out.println(s); / 输出字节对应的字符is.close();/ 关闭字节流该程序的运行结果:文件类型: text/html文件长度: 2381文件内容: -百度一下,你就知道文件内容太多,以下内容就此省略。3、InetAddress:在internet上,表示一个主机的地址有两种方式,即域名地址(如:)和ip地址
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 10 网络 编程 教学 课件

限制150内