您好,欢迎访问三七文档
1第10章网络通信URL指定在Internet上的某个信息资源的地址,包含协议、主机、端口和文件名。Socket通信是基于TCP连接的两个进程之间的端-端通信,TCP连接提供数据通信所需的字节流服务。Socket通信是可靠的、双向的,一方发出的字节流肯定能够到达并被对方接收,同时能够保证数据的完整性。210.1使用URL访问网络资源10.2Socket通信第10章网络通信3学习目标:1.熟悉通过URL访问网络资源方法和Socket通信原理;2.掌握通过URL类获得指定网络资源内容和文件属性;3.理解流在获得文件内容中的作用;4.掌握进行Socket通信的程序设计方法。第10章网络通信410.1使用URL访问网络资源10.1.1URL类10.1.2URLConnection类510.1.1URL类URL用于在Internet上指定信息资源的地址。URL基本结构如下:协议://主机[:端口][/文件][#引用]610.1.1URL类1.URL类声明及构造方法publicfinalclassURLimplementsjava.io.Serializable{publicURL(Stringspec)throwsMalformedURLException//构造方法publicURL(Stringprotocol,Stringhost,Stringfile)throwsMalformedURLExceptionpublicURL(Stringprotocol,Stringhost,intport,Stringfile)throwsMalformedURLException}spec指定一个完整URL地址;port指定端口号;file指定文件名。host指定主机名,本机的主机名默认为localhost。710.1.1URL类例如:下列语句创建URL对象URLurl1=newURL(“file://localhost/C:/ProgramFiles/Java/docs/api/index.html”);URLurl2=newURL(“”);URLurl3=newURL(“http”,“”,8080,“/web/myfile.htm”);810.1.1URL类2.获得URL对象属性URL类提供获得URL对象的协议名、主机名、端口号、文件名和引用字符串等属性的方法。声明如下:publicStringtoString()//返回完整URL地址字符串publicStringgetProtocol()//返回URL对象的协议名PublicintgetPort()//返回URL对象的端口号publicintgetDefaultPort()//返回URL对象的默认端口号publicStringgetHost()//返回URL对象的主机名publicStringgetFile()//返回URL对象的完整文件名publicStringgetRef()//返回URL对象的引用字符串910.1.1URL类3.使用流获得URL资源内容一个URL对象仅仅代表一个网络资源,获取资源内容的操作需要使用流。URL类提供openStream()方法返回一个字节输入流对象,声明如下:publicfinalInputStreamopenStream()throwsjava.io.IOException//返回字节输入流对象该方法将返回一个字节输入流InputStream类的对象,该对象连接着一条和资源通信的通道,于是访问资源内容的操作转化为使用输入流对象的操作,即从字节输入流中读取资源数据。1010.1.2URLConnection类1.URLConnection类声明publicabstractclassURLConnection{publicURLgetURL()//返回当前连接的URL对象publicintgetContentLength()//返回资源文件的长度publicStringgetContentType()//返回资源文件的类型publiclonggetLastModified()//返回资源文件的最后修改日期}1110.1.2URLConnection类2.使用URL类的openConnection方法创建一个URLConnection对象publicURLConnectionopenConnection()throwsjava.io.IOExceptionURLConnection类没有构造方法,创建一个URLConnection对象的操作由URL类的openConnection()方法实现。openConnection()方法声明如下:1210.1.2URLConnection类【例10.1】查看指定URL的HTML源文档内容.——演示使用URL类,URLConnection类.1310.2Socket通信10.2.1Socket的通信原理10.2.2Java的Socket的通信实现1410.2.1Socket的通信原理1.IP协议TCP/IP协议中网络互连层负责将数据报独立地从信源传送到信宿,解决路由选择、阻塞控制和网络互连等问题。网络互连层是TCP/IP体系结构的核心,核心协议是IP协议。IP协议提供主机间的逻辑通信。IP提供的是“尽力而为”的服务模型,即将“尽力而为”地在主机间传送段,但不做任何承诺,即网络层不保证段的交付与否、不保证段交付的时间、不保证段中数据的完整性。因此,IP服务被称为“不可靠”的服务。1510.2.1Socket的通信原理2.传输层协议TCP/IP协议中传输层:负责在源主机和目的主机的应用程序间提供端-端的数据传输服务。传输层协议最基本的任务:延伸IP服务,将IP提供的在两个主机之间传递数据的服务延伸到各主机上运行的诸多进程之间。传输层有两个协议:UDP(用户数据报协议)和TCP(传输控制协议)协议。UDP:一个无连接的协议,完成进程间通信和错误校验两项功能,提供的也是不可靠的服务;TCP:一个面向连接的协议,提供可靠的服务。1610.2.1Socket的通信原理3.TCP协议TCP——在传输层定义的一个可靠的面向连接的协议。通过流控、顺序编码、应答和计时器,TCP保证将数据按序、正确地从某个主机中的一个进程传递到另一台主机的一个进程。TCP将IP所提供的主机间不可靠传递服务转换成为进程间的可靠数据传输服务。1710.2.1Socket的通信原理(1)通过端口指定服务一个IP地址能够唯一确定Internet中的一台主机,而一台服务器可以提供多种网络服务,即一台服务器上可以同时运行多个网络应用程序。那么,对于客户端而言,如何区别在一台服务器上运行的多个网络应用程序呢?即客户端如何指定服务器所提供的服务?解决办法:服务器为每一种网络服务约定一个端口,不同的端口提供不同的服务,客户端通过端口指定需要的服务。例如:约定端口80提供Web服务,客户端在浏览器输入的URL地址中默认端口号是80.一个端口约定一种网络服务,实际指定的是运行提供该服务的网络应用程序的一个进程。1810.2.1Socket的通信原理(2)TCP连接TCP在一个不可靠的互连网络中为应用程序提供可靠的端点间的字节流服务。所有TCP连接都是全双工和点对点的。全双工:指数据可在连接的两个方向上同时传输;点对点:意味着每条TCP连接只有两个端点,因而TCP不支持广播和组播的功能,TCP连接中传输的是字节流。1910.2.1Socket的通信原理(2)TCP连接一个“TCP连接”连接的是两端是Internet上分别在两台主机中运行的两个进程,一个是发送进程,一个是接收进程,每个进程需要用一个IP地址加一个端口号唯一确定。所以,一条TCP连接包含一个源端口号和一个宿端口号,分别用来识别发送进程和接收进程。一个端口号和它所在的主机的IP地址构成一个48位的套接口(Socket),用来确定一个通信的端点,一对套接口就可以在互连网络中唯一标识一条TCP连接。2010.2.1Socket的通信原理4.Socket通信Socket:插座、套接字,指一条连接,就像一根电源线,一端是插头,另一端是插座。Socket通信:基于TCP连接的两个进程之间的端-端通信.TCP连接提供数据通信所需的字节流服务,这种服务是可靠的,一方发出的字节流肯定能够到达并被对方接收,同时能够保证数据的完整性。Socket通信是双向的。2110.2.1Socket的通信原理两个进程在通信之前:通过约定的一个端口号建立一条TCP连接;两个进程结束通信之后:需要断开该TCP连接。4.Socket通信这个机制和电话系统类似,一方按照某人的电话号码拨打电话,另一方听到铃响后接听,连接成功双方通话,通话结束则挂断连接。如果遇到电话号码是空号或手机关机,则不能建立连接;如果电话号码错误,则连接对方错误,需要挂断再重拨正确号码。2210.2.2Java的Socket的通信实现Java提供ServerSocket和Socket类实现Socket通信:ServerSocket类提供TCP连接服务,Socket类提供通信两端的对象。2310.2.2Java的Socket的通信实现1.Java的Socket通信流程实现Socket通信的网络应用程序:服务端程序和客户端程序组成。两端都是Application应用程序。服务端程序:包含一个提供TCP连接服务的ServerSocket类对象和一个参与通信的Socket对象。客户端程序:包含一个参与通信的Socket对象。服务端的ServerSocket类对象提供TCP连接服务,连接成功后,实际进行通信的是服务端的Socket对象和客户端的Socket对象。24图10.2Socket通信流程建立Socket连接通过流传输数据ServerSocket(port)创建ServerSocket对象,提供TCP连接服务服务端accept()在指定端口等待客户端的连接请求连接成功,获得一个已连接的Socket对象Socket(host,port)创建Socket对象,向指定主机端口发出连接请求客户端Socket.close()关闭TCP连接Socket对象ServerSocket对象InputStream获得Socket对象的输入流OutputStream获得Socket对象的输出流InputStream获得Socket对象的输入流OutputStream获得Socket对象的输出流申请连接Socket.close()关闭TCP连接ServerSocket.close()停止提供TCP连接服务一个ServerSocket对象和一个Socket对象一个Socket对象2510.2.2Java的Socket的通信实现Socket通信流程说明如下:服务端创建一个ServerSocket对象,指定端口号。ServerSocket对象等候客户端的连接请求。1.Java的Socket通信流程客户端创建一个Socket对象,指定主机地址和端口号,向服务端发出连接请求。服务端接收到客户端的连接请求,建立一条TCP连接,再创建一个Socket对象与客户端的Socket对象进行通信。2610.2.2Java的Socket的通信实现1.Java的Socket通信流程一方决定结束通信,向对方发送结束信息,另一方接收到结束信息后,双方分别关闭各自的TCP连接。ServerSocket对象停止等候客户端的连接请求。Socket通信流程说明如下:服务端和客户端分别建立字节输入/输出流,进行数据传输准备。服务端和客户端通过各自的字节输入流获得对方发来的数据,通过字节输出流向对方发送数据。2710.2.2Java的Socket的通信实现2.ServerSocket类publicclassServerSocketextendsObject{publicServerSocket(intport)throwsIOException//
本文标题:java网络通信
链接地址:https://www.777doc.com/doc-309832 .html