java网络通信.ppt
第第10章章 网络通信网络通信 URL指定在指定在Internet上的某个信息资源的地址,上的某个信息资源的地址,包含协议、主机、端口和文件名。包含协议、主机、端口和文件名。Socket通信通信是是基于基于TCP连接的两个进程之间的连接的两个进程之间的端端-端端通信通信,TCP连接提供数据通信所需的字节流服务。连接提供数据通信所需的字节流服务。Socket通信是通信是可靠的、双向的可靠的、双向的,一方发出的字节流,一方发出的字节流肯肯定能够到达并被对方接收,定能够到达并被对方接收,同时能够保证数据的完整性。同时能够保证数据的完整性。110.1 使用使用URL访问网络资源访问网络资源10.2 Socket通信通信第第10章章 网络通信网络通信2学习目标:学习目标:1.熟悉通过熟悉通过URL访问网络资源方法和访问网络资源方法和Socket通信原理;通信原理;2.掌握通过掌握通过URL类获得指定网络资源内容和文件属性;类获得指定网络资源内容和文件属性;3.理解流在获得文件内容中的作用;理解流在获得文件内容中的作用;4.掌握进行掌握进行Socket通信的程序设计方法。通信的程序设计方法。第第10章章 网络通信网络通信310.1 使用使用URL访问网络资源访问网络资源10.1.1 URL类类10.1.2 URLConnection类类410.1.1 URL类类URL用于在用于在Internet上指定信息资源的地址。上指定信息资源的地址。URL基本结构如下:基本结构如下:协议协议:/主机主机:端口端口/文件文件#引用引用 510.1.1 URL类类1.URL类声明及构造方法类声明及构造方法public final class URL implements java.io.Serializable public URL(String spec)throws MalformedURLException /构造方法构造方法 public URL(String protocol,String host,String file)throws MalformedURLExceptionpublic URL(String protocol,String host,int port,String file)throws MalformedURLExceptionspec指定一个完整指定一个完整URL地址地址;port指定端口号;指定端口号;file指定文件名。指定文件名。host指定主机名,本机的主机名默认为指定主机名,本机的主机名默认为localhost。610.1.1 URL类类例如:例如:下列语句创建下列语句创建URL对象对象 URL url1=new URL(“file:/localhost/C:/Program Files/Java/docs/api/index.html”);URL url2=new URL(“http:/”);URL url3=new URL(“http”,“”,8080,“/web/myfile.htm”);710.1.1 URL类类2.获得获得URL对象属性对象属性 URL类提供获得类提供获得URL对象的协议名、主机名、端口号、对象的协议名、主机名、端口号、文件名和引用字符串等属性的方法。声明如下:文件名和引用字符串等属性的方法。声明如下:public String toString()/返回完整返回完整URL地址字符串地址字符串public String getProtocol()/返回返回URL对象的协议名对象的协议名Public int getPort()/返回返回URL对象的端口号对象的端口号 public int getDefaultPort()/返回返回URL对象的默认端口号对象的默认端口号public String getHost()/返回返回URL对象的主机名对象的主机名 public String getFile()/返回返回URL对象的完整文件名对象的完整文件名 public String getRef()/返回返回URL对象的引用字符串对象的引用字符串 810.1.1 URL类类3.使用流获得使用流获得URL资源内容资源内容 一个一个URL对象仅仅代表一个网络资源,获取资源内容的对象仅仅代表一个网络资源,获取资源内容的操作需要使用流。操作需要使用流。URL类提供类提供openStream()方法返回一个字方法返回一个字节输入流对象,声明如下:节输入流对象,声明如下:public final InputStream openStream()throws java.io.IOException /返回字节输入流对象返回字节输入流对象 该方法将该方法将返回返回一个字节输入流一个字节输入流InputStream类的对象,类的对象,该对象连接着一条和资源通信的通道,于是该对象连接着一条和资源通信的通道,于是访问资源内容访问资源内容的操作的操作转化为转化为使用输入流对象的操作使用输入流对象的操作,即即从字节输入流中从字节输入流中读取资源数据。读取资源数据。910.1.2 URLConnection类类1.URLConnection类声明类声明 public abstract class URLConnection public URL getURL()/返回当前连接的返回当前连接的URL对象对象 public int getContentLength()/返回资源文件的长度返回资源文件的长度 public String getContentType()/返回资源文件的类型返回资源文件的类型 public long getLastModified()/返回资源文件的最后修改日期返回资源文件的最后修改日期 1010.1.2 URLConnection类类2.使用使用URL类的类的openConnection方法方法 创建一个创建一个URLConnection对象对象 public URLConnection openConnection()throws java.io.IOException URLConnection类没有构造方法,创建一个类没有构造方法,创建一个 URLConnection 对象的操作由对象的操作由URL类的类的openConnection()方法方法实现。实现。openConnection()方法声明如下:方法声明如下:1110.1.2 URLConnection类类【例例10.1】查看指定查看指定URL的的HTML L源文档内容源文档内容.演示使用演示使用URL类类,URLConnection类类.1210.2 Socket通信通信10.2.1 Socket的通信原理的通信原理10.2.2 Java的的Socket的通信实现的通信实现1310.2.1 Socket的通信原理的通信原理1.IP协议协议 TCP/IP协议中协议中网络互连层网络互连层负责将负责将数据报数据报独立地独立地从信源从信源传送到信宿传送到信宿,解决,解决路由选择路由选择、阻塞控制阻塞控制和和网络互连网络互连等问题。等问题。网络互连层是网络互连层是TCP/IP体系结构的核心,核心协议是体系结构的核心,核心协议是IP协议。协议。IP协议协议提供主机间的逻辑通信提供主机间的逻辑通信。IP提供的是提供的是“尽力而为尽力而为”的服务模型,即将的服务模型,即将“尽力而为尽力而为”地在主机间传送段,但不做地在主机间传送段,但不做任任何承诺,即何承诺,即网络层网络层不保证段的交付与否、不保证段交付的时不保证段的交付与否、不保证段交付的时间、不保证段中数据的完整性。间、不保证段中数据的完整性。因此,因此,IP服务服务被称为被称为“不可不可靠靠”的服务的服务。1410.2.1 Socket的通信原理的通信原理2.传输层传输层协议协议TCP/IP协议中协议中传输层传输层:负责在负责在源主机源主机和和目的主机目的主机的应用程序间提的应用程序间提 供供端端-端的数据传输服务。端的数据传输服务。传输层协议传输层协议最基本的任务最基本的任务:延伸延伸IP服务,将服务,将IP提供的在两个提供的在两个主机之间传递数据的服务延伸到各主机上运行的诸多进程之间。主机之间传递数据的服务延伸到各主机上运行的诸多进程之间。传输层有两个协议:传输层有两个协议:UDP(用户数据报协议)(用户数据报协议)和和 TCP(传输控制协议)协议(传输控制协议)协议。UDP:一个一个无连接的协议无连接的协议,完成进程间,完成进程间通信通信和和错误校验错误校验两项两项 功能,功能,提供提供的也是的也是不可靠的服务;不可靠的服务;TCP:一个一个面向连接的协议面向连接的协议,提供可靠的服务。提供可靠的服务。1510.2.1 Socket的通信原理的通信原理3.TCP协议协议TCP在传输层定义的一个在传输层定义的一个可靠的面向连接的协议可靠的面向连接的协议。通过。通过 流控、顺序编码、应答和计时器,流控、顺序编码、应答和计时器,TCP保证将数据保证将数据 按序、正确地按序、正确地从某个主机中的一个进程传递到另一从某个主机中的一个进程传递到另一 台主机的一个进程。台主机的一个进程。TCP将将IP所提供的主机间不可所提供的主机间不可 靠传递服务靠传递服务转换成为转换成为进程间的可靠数据传输服务。进程间的可靠数据传输服务。1610.2.1 Socket的通信原理的通信原理(1)通过端口指定服务通过端口指定服务 一个一个IP地址能够唯一确定地址能够唯一确定Internet中的一台主机,而一台中的一台主机,而一台服务器可以提供多种网络服务,即一台服务器上可以同时运服务器可以提供多种网络服务,即一台服务器上可以同时运行多个网络应用程序。那么,对于客户端而言,如何区别在行多个网络应用程序。那么,对于客户端而言,如何区别在一台服务器上运行的多个网络应用程序呢?即客户端如何指一台服务器上运行的多个网络应用程序呢?即客户端如何指定服务器所提供的服务?定服务器所提供的服务?解决办法:解决办法:服务器为服务器为每一种网络服务每一种网络服务约定一个端口约定一个端口,不同的,不同的 端口提供不同的服务,客户端通过端口指定需要端口提供不同的服务,客户端通过端口指定需要 的服务。的服务。例如:例如:约定端口约定端口80提供提供Web服务,客户端在浏览器输入的服务,客户端在浏览器输入的URL 地址中默认端口号是地址中默认端口号是80.一个端口约定一种网络服务,实际指定的是一个端口约定一种网络服务,实际指定的是运行运行提供该提供该服务的网络应用程序的一个进程服务的网络应用程序的一个进程。1710.2.1 Socket的通信原理的通信原理(2)TCP连接连接 TCP在一个在一个不可靠的互连网络中不可靠的互连网络中为应用程序为应用程序提供可靠的提供可靠的端点间的字节流服务端点间的字节流服务。所有。所有TCP连接都是全双工和点对点的。连接都是全双工和点对点的。全双工:全双工:指数据可在连接的两个方向上同时传输指数据可在连接的两个方向上同时传输;点对点:点对点:意味着每条意味着每条TCP连接只有两个端点连接只有两个端点,因而,因而TCP不支持不支持 广播广播和和组播组播的功能,的功能,TCP连接中传输的是字节流。连接中传输的是字节流。1810.2.1 Socket的通信原理的通信原理(2)TCP连接连接 一个一个“TCP连接连接”连接的是两端是连接的是两端是Internet上分别在两台主上分别在两台主机中运行机中运行 的两个进程,一个是发送进程,一个是接收进程,每的两个进程,一个是发送进程,一个是接收进程,每个进程需要用一个个进程需要用一个IP地址加一个端口号唯一确定。所以,一条地址加一个端口号唯一确定。所以,一条TCP连接包含一个源端口号和一个宿端口号,分别用来识别发连接包含一个源端口号和一个宿端口号,分别用来识别发送进程和接收进程。一个端口号和它所在的主机的送进程和接收进程。一个端口号和它所在的主机的IP地址构成地址构成一个一个48位的套接口位的套接口(Socket),用来确定一个通信的端点,一对,用来确定一个通信的端点,一对套接口就可以在互连网络中唯一标识一条套接口就可以在互连网络中唯一标识一条TCP连接。连接。1910.2.1 Socket的通信原理的通信原理4.Socket通信通信Socket:插座、套接字,指一条连接,就像一根电源线,一端插座、套接字,指一条连接,就像一根电源线,一端 是是插头插头,另一端是,另一端是插座插座。Socket通信通信:基于基于TCP连接的两个进程之间的端连接的两个进程之间的端-端通信端通信.TCP连接连接提供数据通信所需的字节流服务,提供数据通信所需的字节流服务,这种服务是可这种服务是可靠的,一方发出的字节流肯定能够到达并被对方接收,同时能靠的,一方发出的字节流肯定能够到达并被对方接收,同时能够保证数据的完整性。够保证数据的完整性。Socket通信是通信是双向的。双向的。2010.2.1 Socket的通信原理的通信原理两个进程在通信之前两个进程在通信之前:通过约定的一个端口号通过约定的一个端口号建立一条建立一条TCP连接连接;两个进程结束通信之后两个进程结束通信之后:需要断开该需要断开该TCP连接。连接。4.Socket通信通信这个机制和电话系统类似,一方按照某人的电话号码拨打电这个机制和电话系统类似,一方按照某人的电话号码拨打电话,另一方听到铃响后接听,连接成功双方通话,通话结束则话,另一方听到铃响后接听,连接成功双方通话,通话结束则挂断连接。如果遇到挂断连接。如果遇到电话号码是空号或手机关机电话号码是空号或手机关机,则,则不能建立不能建立连接连接;如果;如果电话号码错误电话号码错误,则,则连接对方错误连接对方错误,需要挂断再重拨,需要挂断再重拨正确号码。正确号码。2110.2.2 Java的的Socket的通信实现的通信实现Java提供提供ServerSocket和和Socket类实现类实现Socket通信:通信:ServerSocket类类提供提供TCP连接服务,连接服务,Socket类类提供通信两端的对象。提供通信两端的对象。2210.2.2 Java的的Socket的通信实现的通信实现1.Java的的Socket通信流程通信流程 实现实现Socket通信的网络应用程序:服务端程序和客户端程序通信的网络应用程序:服务端程序和客户端程序组成。两端都是组成。两端都是Application应用程序。应用程序。服务端程序:服务端程序:包含一个包含一个提供提供TCP连接服务的连接服务的ServerSocket类对象类对象 和一个和一个参与通信的参与通信的Socket对象对象。客户端程序:客户端程序:包含一个包含一个参与通信的参与通信的Socket对象。对象。n服务端的服务端的ServerSocket类对象提供类对象提供TCP连接服务,连接成功后,连接服务,连接成功后,实际进行通信的是服务端的实际进行通信的是服务端的Socket对象和客户端的对象和客户端的Socket对象。对象。23图图10.2 Socket通信流程通信流程2410.2.2 Java的的Socket的通信实现的通信实现Socket通信流程说明如下:通信流程说明如下:l服务端创建一个服务端创建一个ServerSocket对象,指定端口号。对象,指定端口号。lServerSocket对象等候客户端的连接请求。对象等候客户端的连接请求。1.Java的的Socket通信流程通信流程l客户端创建一个客户端创建一个Socket对象,指定主机地址和端口号,向服对象,指定主机地址和端口号,向服 务端发出连接请求。务端发出连接请求。l服务端接收到客户端的连接请求,建立一条服务端接收到客户端的连接请求,建立一条TCP连接,再创连接,再创 建一个建一个Socket对象与客户端的对象与客户端的Socket对象进行通信。对象进行通信。2510.2.2 Java的的Socket的通信实现的通信实现1.Java的的Socket通信流程通信流程l一方决定结束通信,向对方发送结束信息,另一方接收到结一方决定结束通信,向对方发送结束信息,另一方接收到结 束信息后,双方分别关闭各自的束信息后,双方分别关闭各自的TCP连接。连接。lServerSocket对象停止等候客户端的连接请求。对象停止等候客户端的连接请求。Socket通信流程说明如下:通信流程说明如下:l服务端和客户端分别建立字节输入服务端和客户端分别建立字节输入/输出流,进行数据传输输出流,进行数据传输 准备。准备。l服务端和客户端通过各自的字节输入流获得对方发来的数据,服务端和客户端通过各自的字节输入流获得对方发来的数据,通过字节输出流向对方发送数据。通过字节输出流向对方发送数据。2610.2.2 Java的的Socket的通信实现的通信实现2.ServerSocket类类public class ServerSocket extends Object public ServerSocket(int port)throws IOException /构造方法,构造方法,port指定端口号指定端口号 public Socket accept()throws IOException /等待接收客户端的连接请求,连接成功后返回一个已连等待接收客户端的连接请求,连接成功后返回一个已连 接的接的Socket对象,通过该对象,通过该Socket对象与客户端的实现实时对象与客户端的实现实时 数据通信数据通信 public int getLocalPort()/返回正在监听的端口号返回正在监听的端口号 public void close()throws IOException /停止等候客户端的连接请求停止等候客户端的连接请求2710.2.2 Java的的Socket的通信实现的通信实现3.Socket类类 public class Socket extends Object public Socket(String host,int port)throws UnknownHostException,IOException /构造方法,指定主机名和端口号构造方法,指定主机名和端口号 public int getPort()/返回远程对方的端口号返回远程对方的端口号 public int getLocalPort()/返回本地已方的端口号返回本地已方的端口号 public InputStream getInputStream()throws IOException /返回返回TCP连接提供的字节输入流连接提供的字节输入流 public OutputStream getOutputStream()throws IOException /返回返回TCP连接提供有字节输出流连接提供有字节输出流 public synchronized void close()throws IOException /关闭关闭TCP连接连接2810.2.2 Java的的Socket的通信实现的通信实现【例例10.2】采用采用Socket通信实现的聊天室程序通信实现的聊天室程序.采用采用Socket通信实现点对点的聊天程序功能通信实现点对点的聊天程序功能.Socket通信中的通信中的服务端服务端和和客户端客户端分别由分别由ChatServerSocket和和ChatSocket类类实现,实现,服务端和客户端共同的服务端和客户端共同的图形用户界面图形用户界面由由ChatJFrame类类实现。实现。29