资源预览内容
第1页 / 共33页
第2页 / 共33页
第3页 / 共33页
第4页 / 共33页
第5页 / 共33页
第6页 / 共33页
第7页 / 共33页
第8页 / 共33页
第9页 / 共33页
第10页 / 共33页
亲,该文档总共33页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第11章 网络编程,11.1 网络编程基础 简单说,网络编程就是在两台计算机之间通过网络协议进行通信,那么,如何准确地找到目标主机,并进行高效可靠的数据传输成为网络编程需要解决的问题。Java提供了完善的类库支持网络通信,这些类在java.net和javax.net包中。先介绍一下网络编程中会用到的几个基本概念。,(1).TCP/IP(Transmission Control Protocol/Internet Protocol)协议:是用在Internet上的数据通信协议,分别是传输控制协议和互联网协议,是Internet最基本的协议,是互联网的基础,指明了计算机如何连入Internet网,以及在计算机之间传输数据的标准。TCP协议属于传输层,IP协议属于网络层。TCP是一种面向连接的保证可靠传输的协议,可以得到一个顺序的无差错数据流,发送端和接收端必须建立连接,可以进行双向数据通信,也就是两端都可以发送和接收数据流。 (2). UDP(User Datagram Protocol):是与TCP/IP同属传输层的协议,是一种面向无连接的协议,每个数据报包括完整的源地址和目的地址,在网络上以任何可能的路径传往目的地,因此能否到达目的地、到达目的地的时间以及内容的正确性都无法保证。,TCP/IP协议和UDP协议都比较简单,使用UDP协议时,由于每个数据报中有完整的地址信息,所以无需建立发送端和接收端的连接;使用TCP协议时,由于它是一个面向连接的协议,在数据传输之前必然要建立连接,所以在TCP中多了建立连接的时间。使用UDP传输数据时数据报大小有限制,必须限定在64KB之内;使用TCP没有限制,只要建立了连接,发送端和接收端就可以传输大量的数据。UDP是不可靠的协议,发送端所发送的数据报并不一定以相同的次序到达接收端;TCP是可靠的协议,能保证接收端正确的获取发送端所发送的全部数据。为什么有了可靠传输的TCP还需要不可靠的UDP呢?因为可靠的传输是要付出代价的,对数据内容正确性的检验需要计算机的处理时间和网络带宽,因此TCP的传输效率低,对于诸如音频数据等对可靠性要求不是很严格的情况使用UDP更适合。,(3).IP地址:是用于标识计算机的数字序列,以区分网络中不同的计算机。IP地址由四部分组成,各部分之间用小数点分开,例如:210.30.70.196。每台计算机要连接到Internet上,必须有IP地址,IP地址空间分为不同种类,每一类具有不同的网络号位数和主机号位数。 (4).域名:是用来替代难以记忆的数字型IP地址的一种符号化的地址方案。一般由若干个字母和数字及一些符号构成,具有一定的层次和逻辑,便于记忆,可以通过域名解析器将其解析为相应的IP地址。网络中大多数IP地址都有对应的域名,例如新浪网域名www.sina.com.cn对应的IP地址是60.215.128.249。,(5).端口:网络中每台主机都可以提供多种服务,例如WEB服务,FTP服务等,主机通过端口来区分这些不同的服务,这里的端口指的是逻辑上的含义,而非硬件设备的端口,端口通过端口号表示,端口号取值0到65535的整数。在实际中,主机通过“IP地址+端口号”区分不同的服务。 (6).统一资源定位器URL(Uniform Resource Locator):也被称为网页地址,是因特网上标准的资源地址,表明某个资源所在的位置和存取方式。URL一般由两部分构成:协议和目的地址,“协议”部分指明用户请求的网络资源的类型,常见的协议有HTTP、FTP、Telnet是否应改为HTTP、FTP、Telnet,请核对等,“目的地址”部分一般是网络上计算机的资源的完整名称,包括主机名和端口号、路径名、文件名,所以完整的URL的格式为:协议名:/主机名:端口号/路径名/文件名, 例如一个完整的URL地址:http:/www.dlou.edu.cn/znbm/znbm.htm,其中,“http”为协议,“www.dlou.edu.cn”为主机名,端口号省略,“znbm/znbm.htm”为路径和文件名,在浏览器的地址栏输入这个URL地址,就会找到该文件资源。,(7).客户/服务器模式:即C/S模式。网络资源存放在服务器上,用户需要资源的时候向服务器发出请求,实现数据的通信,具体过程为:客户与服务器建立连接,需要指定主机名,端口号,资源文件名;连接建立好之后,客户向服务器发出请求,请求中会包含客户的信息和请求的资源文件名;服务器接收请求指令后进行处理,并把处理的结果返回给客户;通信结束后,关闭客户和服务器之间的连接。,11.2 URL编程 URL是网络资源的地址,在Java的类库中定义了URL类,经常要构造URL对象完成读取数据等功能。如果需要向服务器发送数据,就需要在客户端和服务器端之间建立连接,此时会用到URLConnection类,这两个类都在java.net包中。,11.2.1 URL类 1URL类的构造方法 URL类是对URL地址的抽象,使用之前先构造URL对象,URL类的构造方法如下: (1)public URL (String spec):通过一个字符串构造一个URL对象,该字符串表示URL地址,例如:URL urlIndex=new URL(“http:/www.dlou.edu.cn/“);。 (2)public URL(URL context, String spec):用一个URL和一个字符串构造一个URL对象,第一个参数是URL类对象,表示一个地址,第二个参数是字符串类对象,表示相对于第一个参数的地址,例如:URL urlSomePage=new URL(urlIndex, “znbm/znbm.htm“)创建一个URL类对象,该URL指向urlIndex所指向的位置下znbm文件夹下的znbm.htm文件。,(3)public URL(String protocol, String host, String file):用三个字符串构造一个URL对象,第一个字符串类参数表示协议,第二个字符串类参数表示主机名,第三个字符串类参数表示资源文件名,例如:URL urlSomePage1=new URL(“http“, “www.dlou.edu.cn“, “/znbm/znbm.htm“);。 (4)public URL(String protocol, String host, int port, String file):通过四个字符串构造一个URL对象,第三个参数表示要构造的URL地址的端口号,其他参数含义同上,例如:URL urlSomePage1=new URL(“http“, “www.dlou.edu.cn“, 80, “/znbm/znbm.htm“);。 特别提示:构造URL对象时,如果代表URL地址的字符串的格式不符合URL格式标准,将抛出MalformedURLException类异常。因此构造URL类对象的程序必须要处理该异常,用try-catch语句进行捕获。格式如下: try URL myURL= new URL(); catch (MalformedURLException e) ,2URL类的其他常用方法 一个URL对象生成后,可以通过类URL所提供的方法来获取与该URL地址相关的属性,常用方法如下: (1)public String getProtocol(): 获取该URL的协议名。 (2)public String getHost() :获取该URL的主机名。 (3)public int getPort() :获取该URL的端口号,如果没有设置端口,返回-1。 (4)public String getFile(): 获取该URL的资源文件名。 (5)public String getPath():获取该URL的路径。 (6)public String getAuthority():获取该URL的权限信息。,(7)public String getUserInfo():获得使用者的信息。 例如:下面的语句可获取“http:/www.dlou.edu.cn/znbm/znbm.htm”地址的主机名: String hostName= urlSomePage.getHost(); 其中urlSomePage为前文定义的变量,hostName的值为“www.dlou.edu.cn”。 (8)URL类提供的另外一个重要的功能是读取URL对象所代表的网络资源。当构建好一个URL对象后,就可以用URL的openStream()的方法读取指定的WWW资源,其定义为: InputStream openStream(); 该方法与指定的URL建立了连接,返回一个InputStream对象,即该流指向URL所包含的资源,从建立的连接中读取数据,这就完成了把服务器端的数据读取到客户端。,11.2.2 URLConnection类 URL类只提供了从网络上读取数据的openStream()方法,在实际系统中还经常需要向网络中发送数据,向网络发送数据首先需要建立连接,然后才能实现向网络中发送数据, URLConnection类提供了这种功能。URLConnection类代表应用程序和URL之间的通信连接。 URLConnection类的使用方法是:URL对象建立好后,用openConnection()打开该URL对象上的连接,返回URLConnection对象,进行读写操作。如果URL格式不正确,发生MalformedURLException异常,如果连接过程失败,将产生IOException。,11.2.3 InetAddress类 与前面提到的IP地址相关的类InetAddress在java.net包中,也经常在网络编程中使用,该类表示互联网协议 (IP) 地址。InetAddress 对象包含 IP 地址,还可能包含相应的主机名,这取决于它是否用主机名构造或者是否已执行反向主机名解析。 构造该对象的常用方法有getLocalHost()、getByName()、getByAddress(),第一个方法用于构造本机InetAdress对象,另外两个用于构造远程主机的InetAddress对象。下面分别介绍其用法。,1getLocalHost()方法 用getLocalHost()方法可得到包含本机IP的InetAddress对象。该方法的定义如下: public static InetAddress getLocalHost() throws UnknownHostException,该方法可能抛出UnknownHostException异常,调用该方法时需捕捉或允许抛出这个异常。,2getByName()方法 该方法是InetAddress类最常用方法。通过指定域名从域名服务器中获得相应的IP地址。getByName()需要一个String类型参数,该参数指明远程主机的域名,该方法定义如下: public static InetAddress getByName(String host) throws UnknownHostException 如果host所指的域名对应的IP地址有多个,getByName()返回第一个IP地址。结合前面讲的getLocalHost()方法,如果本机名已知,可以使用getByName()方法来代替 getLocalHost()。如果参数getByName()方法的host所指的域名不存在,getByName()方法将抛出UnknownHostException异常。,3getByAddress()方法 该方法通过IP地址构造InetAddress对象,而且IP地址是byte数组形式。该方法有两个重载形式,分别定义如下: (1)public static InetAddress getByAddress(byte addr) thro
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号