《java程序设计 课件 第8章 网络编程概述.ppt》由会员分享,可在线阅读,更多相关《java程序设计 课件 第8章 网络编程概述.ppt(197页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、第第8 8章章 网络编程概述网络编程概述 第第8章章 网络编程概述网络编程概述 8.1 概述概述 8.2 URL编程编程 8.3 Socket编程简介编程简介 实训八实训八 用用Java实现网络通信实现网络通信 习题八习题八 第第8 8章章 网络编程概述网络编程概述 8.1 概概 述述 8.1.1网络技术基础Internet上的计算机之间采用TCP/IP协议进行通信,图8.1是TCP/IP协议体系的层次结构。TCP/IP没有对OSI参考模型中的物理层和数据链路层作出规定,只是定义了网络接口,使得TCP/IP协议可以运行在各种硬件设备上。TCP/IP协议的互联网层负责相邻结点之间的数据传送,处理
2、网络的路由选择、流量控制和拥塞控制等问题。第第8 8章章 网络编程概述网络编程概述 图8.1TCP/IP协议的层次结构第第8 8章章 网络编程概述网络编程概述 使用Java语言编写网络通信程序通常是在应用层,对某些特殊的应用可能需要直接基于传输层协议编程,一般无需关心网络通信的具体细节,特别是互联网层和网络接口层。传输层提供在源结点和目标结点的两个进程实体之间提供可靠的端到端的数据传输,TCP/IP模型提供了两种传输层协议,即传输控制协议TCP和用户数据报协议UDP。第第8 8章章 网络编程概述网络编程概述 TCP协议是面向连接的,在传送数据之前必须与目标结点建立连接,数据传输结束后关闭连接。
3、而UDP是一种无连接协议,可直接传输数据,无需事先建立连接,直接发送带有目标结点信息的数据报。不同的数据报可能经过不同的路径到达目标结点,到达时的顺序与出发时的顺序也可能不同。第第8 8章章 网络编程概述网络编程概述 采用哪种传输层协议是由应用程序的需要决定的,如果可靠性更重要的话,用面向连接的协议会好一些。比如文件服务器需要保证数据的正确性和有序性,如果一些数据丢失了,系统的有效性将会失去。而有一些服务器是间歇性地发送一些数据块的,如果数据丢失,服务器并不需要再重新发送,因为当数据到达的时候,它可能已经过时了。确保数据的有序性和正确性需要额外的操作和存储空间,这将会降低系统的响应速率。第第8
4、 8章章 网络编程概述网络编程概述 传输层的上一层是应用层,应用层包括所有的高层协议。早期的应用层有远程登录协议(Telnet)、文件传输协议(FileTransferProtocol,FTP)和简单邮件传输协议(Simple MailTransfer Protocol,SMTP)等。目前使用最广泛的应用层协议是用于从Web服务器读取页面信息的超文本传输协议(Hyper Text TransferProtocol,HTTP)。第第8 8章章 网络编程概述网络编程概述 端口(Port)与IP地址一起为网络通信的应用程序之间提供一种确切的地址标识,IP地址标识了发送数据的目的计算机,而端口标识了将
5、数据包发送给目的计算机上的哪一个应用程序,如图8.2所示。应用层协议通常采用客户/服务器模式,应用服务器启动后监听特定的端口,客户端需要服务时请求与服务器该端口建立连接。一些常用的应用服务都有缺省的端口(称为熟知端口),例如Web服务器缺省的端口号为80。第第8 8章章 网络编程概述网络编程概述 图8.2端口与IP地址的标识作用第第8 8章章 网络编程概述网络编程概述 8.1.2网络编程的基本方法Java语言专门为网络通信提供了软件包。采用包提供的API可以快速方便地开发基于网络的应用。包对http协议提供了特别的支持。只需通过URL类对象指明图像、声音资源的位置,无需额外的工作,就可以轻松地
6、从Web服务器上获取图像、声音,或者通过流操作获取HTML文档及文本等资源,并可以对获得的资源进行处理。在本书4.1节的案例中从Web服务器下载广告图片就采用了这种方法,可以看出,使用这种方法下载图像是相当简单的。第第8 8章章 网络编程概述网络编程概述 包 还 提 供 了 对 TCP、UDP协 议 套 接 字(Socket)编程的支持,可以建立用户自己的服务器,实现特定的应用。Socket是一种程序接口,最初由California大学Berkeley分校开发,是用于简化网络通信的一种工具,是UNIX操作系统的一个组成部分。现在Socket的概念已深入到各种操作环境,包括Java。第第8 8章
7、章 网络编程概述网络编程概述 8.2 URL 编编 程程8.2.1URL的概念URL(UniformResourceLocator,统一资源定位器)用来标识Internet上的资源,指明取得资源采用的协议和地址,通过URL可以访问Internet上相应的文件和其他资源。典型的URL格式为协议名:/主机名:端口号/资源路径第第8 8章章 网络编程概述网络编程概述 协议名用于指明获取资源所用的传输协议,例如http、ftp、gopher等;主机名指明资源所在的计算机,端口号指明服务器的端口号,对于常用的一些协议(如http、ftp等),如果不指明端口号,则使用该协议缺省的熟知端口;资源路径指明该资
8、源在服务器上的虚拟路径。例如:http:/ 8章章 网络编程概述网络编程概述 资源路径还可以包含HTML文件中的参考位置(或称为参考点),例如:http:/:80/home/white_paper.html#intro_1这里,intro_1为white_paper.html中的一个位置。第第8 8章章 网络编程概述网络编程概述 上面定义的URL形式包含访问网络资源的完整路径,通常称为绝对URL。在HTML文档中通常还会使用相对URL。一个相对URL不包括协议或主机信息,用于指定与当前文档处于相同主机的HTML文档。相对URL可能包括相对路径的成员,也可能是URL片断。例如,在http:/ 8
9、章章 网络编程概述网络编程概述 system-configurations.html表示资源http:/ 8章章 网络编程概述网络编程概述 8.2.2URL类1URL对象的创建用Java语言访问Web资源是通过URL类来实现的,URL类定义了一个Web资源的统一资源定位器和可以对其进行的一些操作。URL类的对象指向Web资源(如Web页、文本文件、图形图像文件、音频视频文件等等),创建URL对象后可取得URL的各个部分的信息和获取URL内容。URL类的构造方法有多种形式,下面是常用的几种形式:第第8 8章章 网络编程概述网络编程概述 (1)publicURL(Stringspec)throws
10、MalformedURLException:简单地用一个字符串生成URL对象,如:URLurl0=newURL(http:/ 8章章 网络编程概述网络编程概述 (2)public URL(String protocol,String host,Stringfile)throwsMalformedURLException:分开指定URL的各个部分,包括协议、主机名、资源路径,采用缺省端口构成URL对象,如:URLurl1=newURL(http,/j2se/1.4.2/download.html);第第8 8章章 网络编程概述网络编程概述 (3)publicURL(Stringprotocol,
11、Stringhost,intport,Stringfile)throwsMalformedURLException:分开指定的URL各个部分构成URL对象,如:URLurl2=newURL(http,80,/j2se/1.4.2/download.html);(2)、(3)两种构造方法不能构造含有“#参考点”的URL地址。第第8 8章章 网络编程概述网络编程概述 (4)publicURL(URLcontext,Stringspec):构造相对URL对象,如:URLbase1=newURL(http:/ 8章章 网络编程概述网络编程概述 这种方法常用于JavaApplet。Applet类提供了方
12、法getDocumentBase和getCodeBase,分别用于获得当前Applet所在页面的目录路径和Applet所在的目录路径,关于这一点程序4.1中已介绍过,本章不再详述。在Applet中可采用类似下面的代码来构造URL对象:URLurl1=newURL(getDocumentBase(),file1.txt);URLurl2=newURL(getCodeBase(),file2.txt);第第8 8章章 网络编程概述网络编程概述 URL类的构造方法都抛出MalformedURLException异常,生成URL对象时,必须对这一异常进行处理。例如:tryURLmyURL=newURL
13、(http:/ 8章章 网络编程概述网络编程概述 URL对象创建后,不再可以修改该对象所表示的URL地址,但可以通过URL类提供的方法成员来获取其属性,如协议、主机名、端口号、文件名等。常用的方法有:publicintgetPort():得到URL对象的端口号;publicStringgetProtocol():得到URL对象的协议名;第第8 8章章 网络编程概述网络编程概述 publicStringgetHost():得到URL对象的主机名;publicStringgetFile():得到URL对象的文件名;publicStringgetRef():得到URL对象的参考点;publicboo
14、leanequals(Objectobj):比较两个URL,不包括参考点。第第8 8章章 网络编程概述网络编程概述 2从网络上获取图像JavaApplet可以使用getImage方法直接从Web服务器获取图像资源,目前支持的图像文件格式为GIF和JPEG两种,第4章的程序4.1就采用了这种方法从服务器下载广告图片。下面再来看一个简单的例子。第第8 8章章 网络编程概述网络编程概述 【程序8.1】使用相对URL从Web服务器获取图像。importjava.applet.*;importjava.awt.*;publicclassdownImageextendsAppletImageimage;p
15、ublicvoidinit()image=getImage(getDocumentBase(),test.gif);第第8 8章章 网络编程概述网络编程概述 publicvoidpaint(Graphicsg)g.drawImage(image,0,0,this);程序8.1获取并显示了图像test.gif。在该例中,首先用语句getImage(getDocumentBase(),test.gif);第第8 8章章 网络编程概述网络编程概述 从HTML文档所在位置下载图像test.gif,并创建一个Image类型的对象image,然后在paint方法中用语句g.drawImage(image,
16、0,0,this);在屏幕上将图像显示出来。Applet类提供的getImage方法有两种形式:ImagegetImage(URLurl,Stringname);ImagegetImage(URLurl)。第第8 8章章 网络编程概述网络编程概述 程序8.1采用了第一种形式,图像资源的完整路径由第一个参数表示的路径目录与第二个字符串参数表示的相对URL构成。第二种形式直接使用完整的URL给出图像资源的路径。采用第二种形式代码段形式通常像下面这样:第第8 8章章 网络编程概述网络编程概述 Stringurl=图像资源URL;Imageimage;tryimage=getImage(newURL(
17、url);catch(Exceptione)System.out.println(CantopentheURL);第第8 8章章 网络编程概述网络编程概述 不过,在JavaApplet中一般很少采用绝对URL,因为出于安全性的考虑,浏览器只允许JavaApplet访问与Applet同一主机的资源。如果采用绝对URL,则当Applet放到其他的Web服务器上运行时,必须修改程序。第第8 8章章 网络编程概述网络编程概述 【程序8.2】使用绝对URL从Web服务器获取图像。importjava.applet.*;.*;importjava.awt.*;publicclassgetImageexte
18、ndsAppletImageimage;publicvoidinit()Stringurl=http:/ 8章章 网络编程概述网络编程概述 tryimage=getImage(newURL(url);catch(Exceptione)publicvoidpaint(Graphicsg)g.drawImage(image,0,0,this);第第8 8章章 网络编程概述网络编程概述 程序8.2采用绝对URL,试图显示http:/ 8章章 网络编程概述网络编程概述 下面还有若干行,这里省略了。该信息表明getImage方法无法访问,引发了安全性异常SecurityExceptionEx。如果使用J
19、DK的appletviewer运行该程序,输出信息有所不同,getImage方法失败,image对象为null,Graphics类的drawImage方法无法正确绘制图像,从而引发异常。第第8 8章章 网络编程概述网络编程概述 getImage方法在调用后立即返回,并不等待图像全部载入。因此有时会出现drawImage方法在图像没有载入之前就开始执行了,导致程序刚执行时图像不能正确显示。为解决这个问题,Java提供了MediaTracker类,用于跟踪图像及声音等媒体的载入。MediaTracker使用方法如下:(1)构造一个MediaTracker对象;(2)在下载图像(getImage)之
20、后,使用addImage方法添加需要跟踪的图像;(3)在显示图像(drawIamge)之前,使用waitForAll方法跟踪图像状态。第第8 8章章 网络编程概述网络编程概述 例如,程序8.1的init方法可改为:publicvoidinit()tryimage=getImage(getDocumentBase(),test.gif);MediaTrackertracker=newMediaTracker(this);/构造一MediaTracker对象tracker.addImage(image,0);/添加需要跟踪的图片第第8 8章章 网络编程概述网络编程概述 tracker.waitFo
21、rAll();catch(Exceptione)init方法等待图像载入完毕后才返回,以确保paint方法被调用时图像已全部载入。MediaTracker类的构造函数为publicMediaTracker(Componentcomp)即为给定组件创建一个跟踪媒体的MediaTracker对象。第第8 8章章 网络编程概述网络编程概述 下面是MediaTracker类的几种常用方法:publicvoidaddImage(Imageimage,intid):将图像添加到被跟踪的图像组。参数image为需跟踪的图像,参数id为图像组指定标识。publicbooleancheckAll():检查所有图
22、像是否下载完毕。publicbooleancheckAll(booleanload):检查所有图像是否下载完毕。参数load若为true,且图像尚未开始下载,则立即开始下载。第第8 8章章 网络编程概述网络编程概述 publicbooleancheckID(intid)。publicbooleancheckID(intid,booleanload)。以上两种方法用于检查指定id的图像是否完成下载,参数load的含义同checkAll方法。publicObjectgetErrorsAny():返回出错的媒体组。publicObjectgetErrorsID(intid):返回带有给定标识号的出错
23、的媒体组。publicbooleanisErrorAny():检查所有图像的错误状态。第第8 8章章 网络编程概述网络编程概述 publicbooleanisErrorID(intid):检查所有带有给定标识号的图像的错误状态。publicvoidwaitForAll()throwsInterruptedException:开始下载所有的图像,直到下载完毕后返回。publicbooleanwaitForAll(longms)throwsInterruptedException:开始下载所有的图像,直到下载完毕或参数ms指定的时间(毫秒数)到达后返回。第第8 8章章 网络编程概述网络编程概述 p
24、ublicvoidwaitForID(intid)throwsInterruptedException。public boolean waitForID(int id,long ms)throwsInterruptedException:等待载入指定标识的图像,参数ms的含义同waitForAll方法。publicintstatusAll(booleanload)。publicintstatusID(intid,booleanload)。第第8 8章章 网络编程概述网络编程概述 以上两种方法用于返回所有图像或指定id图像的载入状态,状态取值可以为:ABORTED(下载失败)、COMPLETE(
25、下载成功)、ERRORED(下载时发生错误)、LOADING(正在下载)。参数load若为true,则表示如果图像尚未开始下载,立即启动下载过程。第第8 8章章 网络编程概述网络编程概述 3从网络上获取声音与获取图像类似,Java也提供了从Web服务器获取声音资源并播放的方法。Java2以前的版本只能处理单声道8kHz的采样频率的AU文件,Java2增加了对AIFF,WAV以及三种MIDI文件类型的支持。可以利用Applet类的方法play直接播放网络上的声音文件,或使用getAudioClip方法先从网络上获取声音资源,生成AudioClip类型的对象,然后对该对象进行操作。第第8 8章章
26、网络编程概述网络编程概述 play方法有两种形式:voidplay(URLurl):使用绝对URL表示声音资源的访问路径。voidplay(URLurl,Stringname):使用相对URL表示声音资源的访问路径。第第8 8章章 网络编程概述网络编程概述 类似地,getAudioClip方法也有两种形式:AudioClipgetAudioClip(URLurl)AudioClipgetAudioClip(URLurl,Stringname)程序8.3采用play方法播放与Applet同目录的AU文件。第第8 8章章 网络编程概述网络编程概述 【程序8.3】声音资源的播放。importjava
27、.applet.*;importjava.awt.*;.*;publicclassMidiPlayextendsAppletpublicvoidpaint(Graphicsg)try第第8 8章章 网络编程概述网络编程概述 play(getCodeBase(),example.au);catch(Exceptione)第第8 8章章 网络编程概述网络编程概述 AudioClip是Java语言定义的支持声音播放的接口,该接口定义了下面三个抽象方法:voidloop():循环播放该声音资源;voidplay():开始播放该声音资源;voidstop():停止播放该声音资源。利用这三个方法可以控制声
28、音的播放,程序8.4是一个简单的例子。第第8 8章章 网络编程概述网络编程概述 【程序8.4】用AudioClip接口播放声音资源。importjava.awt.*;importjava.applet.*;importjava.awt.event.*;publicclassSoundPlayextendsAppletimplementsActionListener第第8 8章章 网络编程概述网络编程概述 ButtonplayBtn=newButton(播放);ButtonstopBtn=newButton(停止);ButtonloopBtn=newButton(循环);AudioClipau;
29、publicvoidinit()第第8 8章章 网络编程概述网络编程概述 playBtn.addActionListener(this);stopBtn.addActionListener(this);loopBtn.addActionListener(this);add(playBtn);add(stopBtn);add(loopBtn);第第8 8章章 网络编程概述网络编程概述 au=getAudioClip(getCodeBase(),example.au);publicvoidactionPerformed(ActionEvente)Objectobj=e.getSource();if
30、(obj=playBtn)au.play();elseif(obj=stopBtn)au.stop();第第8 8章章 网络编程概述网络编程概述 elseau.loop();程序8.4执行时显示三个按钮,如图8.3所示,点击按钮可以分别调用play、stop、loop方法。第第8 8章章 网络编程概述网络编程概述 图8.3声音资源的播放第第8 8章章 网络编程概述网络编程概述 4显示网络上的其他HTML文档对于Web服务器上的HTML文档,JavaApplet有两种访问方法:一种是由浏览器打开该网页,另一种由Applet直接读取HTML文档。这里先介绍第一种方法,程序4.1中单击广告图片后,浏
31、览器打开一个新窗口浏览指定的网页,采用的就是这种方法。浏览器显示指定网页是利用Applet类的方法getAppletContext来实现的,该方法返回一个AppletContext对象,JavaApplet通过该对象访问浏览器。第第8 8章章 网络编程概述网络编程概述 AppletContext的方法showDocument可以显示指定Web服务器的HTML文档,包括Applet所在服务器以及网络上的其他Web服务器。SowDocument方法有两种形式:voidShowDocument(URLurl);voidShowDocument(URLurl,Stringtarget)。第第8 8章章
32、 网络编程概述网络编程概述 第一种形式在当前Applet所在的浏览器窗口(或框架,有关内容请参考HTML标准中有关框架的内容)中打开指定的网页;第二种形式在指定的浏览器窗口(或框架中)打开指定的网页。程序8.5演示了ShowDocument方法的使用,程序执行画面如图8.4所示。程序中的窗口名_blank表示始终在新窗口中打开指定网页。第第8 8章章 网络编程概述网络编程概述 图8.4程序8.5运行画面第第8 8章章 网络编程概述网络编程概述 【程序8.5】用浏览器打开指定网页。importjava.applet.*;importjava.awt.*;.*;importjava.awt.eve
33、nt.*;publicclassShowHtmlextendsAppletimplementsActionListener第第8 8章章 网络编程概述网络编程概述 StringtheURL;ButtonjavaHome=newButton(http:/ newWin=new Checkbox(Open in newwindow);publicvoidinit()GridBagLayoutgbl=newGridBagLayout();第第8 8章章 网络编程概述网络编程概述 GridBagConstraintsgbc=newGridBagConstraints();setLayout(gbl);
34、gbc.gridwidth=gbc.REMAINDER;gbl.setConstraints(newWin,gbc);add(newWin);第第8 8章章 网络编程概述网络编程概述 gbc.gridwidth=gbc.REMAINDER;gbl.setConstraints(javaHome,gbc);add(javaHome);javaHome.addActionListener(this);gbc.gridwidth=gbc.REMAINDER;gbl.setConstraints(sunHome,gbc);add(sunHome);sunHome.addActionListener(t
35、his);第第8 8章章 网络编程概述网络编程概述 gbc.gridwidth=gbc.REMAINDER;gbl.setConstraints(j2se,gbc);add(j2se);j2se.addActionListener(this);publicvoidactionPerformed(ActionEvente)theURL=e.getActionCommand();第第8 8章章 网络编程概述网络编程概述 URLurlObj=null;tryurlObj=newURL(theURL);catch(MalformedURLExceptionex)System.out.println(C
36、antopentheURL);第第8 8章章 网络编程概述网络编程概述 if(urlObj!=null)if(newWin.getState()getAppletContext().showDocument(urlObj,_blank);/浏览器新建一个窗口打开指定网页第第8 8章章 网络编程概述网络编程概述 elsegetAppletContext().showDocument(urlObj);/浏览器在当前窗口中打开指定网页第第8 8章章 网络编程概述网络编程概述 5读取网络上文件的内容上面的方法只是显示或播放网络上结点的图像、声音及HTML文档,没有对其内容进行处理。实际上,Java还可
37、读取网络上文件的内容,并对其内容进行处理。读取网络上文件内容的步骤如下:第第8 8章章 网络编程概述网络编程概述 (1)创建一个URL类型的对象。例如:Stringurl=http:/ 8章章 网络编程概述网络编程概述 (2)利用URL类的openStream方法获得对应的InputStream类的对象。例如:InputStreamfilecon=fileur.openStream();(3)将InputStream对象转化为DataInputStream类的对象。例如:DataInputStreamfiledata=newDataInputStream(filecon);(4)读取内容。例如
38、,对上面的filedata,可用filedata.readLine一行一行读取内容,或用filedata.readchar一个字符一个字符地读取。第第8 8章章 网络编程概述网络编程概述 程序8.6和程序8.7分别演示了JavaApplet与Java应用程序读取网络文件的方法,它们的基本步骤相同。但是出于安全性考虑,Applet在浏览器中运行时不允许与Applet所在主机外的其他主机建立联系。JavaApplication无此限制,此外,当浏览器从本地盘打开调用JavaApplet的HTML文档时,也不受此限制。第第8 8章章 网络编程概述网络编程概述 【程序8.6】下载HTML文件的Java
39、小程序。importjava.io.*;.*;importjava.awt.*;importjava.applet.*;publicclassdownHtmlextendsAppletURLfileur;第第8 8章章 网络编程概述网络编程概述 TextAreashowarea=newTextArea(Pleasewaitawhileforgettext,10,30);publicvoidinit()tryfileur=newURL(getCodeBase(),Page1.htm);catch(MalformedURLExceptione)System.out.println(CantgetU
40、RL:);第第8 8章章 网络编程概述网络编程概述 add(showarea);publicvoidpaint(Graphicsg)InputStreamfilecon=null;DataInputStreamfiledata=null;Stringfileline;showarea.setText();try第第8 8章章 网络编程概述网络编程概述 filecon=fileur.openStream();filedata=newDataInputStream(filecon);while(fileline=filedata.readLine()!=null)showarea.append(f
41、ileline+n);第第8 8章章 网络编程概述网络编程概述 catch(IOExceptione)System.out.println(ErrorinI/O:+e.getMessage();第第8 8章章 网络编程概述网络编程概述 【程序8.7】下载HTML文件的Java应用程序。.*;importjava.io.*;publicclassdownHtmlApppublicstaticvoidmain(Stringargs)if(args.length!=1)第第8 8章章 网络编程概述网络编程概述 System.out.print(Error!);System.exit(1);URLth
42、eUrl;trytheUrl=newURL(args0);InputStreamfilecon=theUrl.openStream();Stringfileline=null;第第8 8章章 网络编程概述网络编程概述 InputStreamReaderfr=newInputStreamReader(filecon);BufferedReaderbr=newBufferedReader(fr);while(fileline=br.readLine()!=null)System.out.println(fileline);第第8 8章章 网络编程概述网络编程概述 catch(Exceptione)
43、System.out.println(e.getMessage();程序8.7从命令行获取要下载网页的URL,使用JDK运行时在命令行中输入URL。例如:javadownHtmlApphttp:/第第8 8章章 网络编程概述网络编程概述 8.2.3URLConnection类上面介绍了使用URL类打开输入流获取网络资源的方法,但有时可能还需要向Web服务器发送信息,例如在程序中使POST方法向Web服务器发送一个表单,必须使用URLConnection类。URLConnection类可提供的信息比URL类要多得多,除了可以获取资源数据外,还可以提供资源长度、发送时间、最新更新时间、编码、标题等
44、许多信息。它是所有Java程序和URL之间创建通信链路的类的抽象超类,可用于连接由URL标识的任何资源。该类的对象既可用于从资源中读,也可用于往资源中写。第第8 8章章 网络编程概述网络编程概述 通常,Java程序无需创建URLConnection类的对象,一旦成功创建一个URL类的对象,可以通过使用openConnection方法来获得URLConnection类的对象。使用openConnection不需要参数,操作成功之后,返回一个URLConnection类的对象。下面的代码段演示了打开一个到URL连接的过程:第第8 8章章 网络编程概述网络编程概述 tryURLurl=newURL(
45、http:/);URLConnectionconnection=url.openConnection();catch(Exceptione)System.out.println(e.toString();第第8 8章章 网络编程概述网络编程概述 一旦成功地建立了一个连接,就可以获得针对这个连接的输出流进行写操作,或者获得针对这个连接的输入流进行读操作。URL可以代表很多不同种类的数据类型所组成的资源,但可以用同样的方式对从URLConnection输入流返回的数据进行操作。下面的程序片断演示了从URL中读取文本数据的方法。第第8 8章章 网络编程概述网络编程概述 tryURLurl=newUR
46、L(http:/);URLConnectionconnection=url.openConnection();InputStreaminStream=connection.getInputStream();BufferedReaderinput=newBufferedReader(newInputStreamReader(inStream);第第8 8章章 网络编程概述网络编程概述 Stringline=;while(line=input.readLine()!=null)System.out.println(line);catch(Exceptione)System.out.println(
47、e.toString();第第8 8章章 网络编程概述网络编程概述 进行写操作同样也很简单,建立一个成功的连接之后,首先调用setDoOutput方法将输出(Output)属性设置为真(true),指定该连接可以进行写操作。下面的程序片断演示了如何把数据写入一个URL。tryURLurl=newURL(http:/);URLConnectionconnection=url.openConnection();connection.setDoOutput(true);OutputStreamoutStream=connection.getOutputStream();第第8 8章章 网络编程概述网
48、络编程概述 ObjectOutputStreamobjectStream=newObjectOutputStream(outStream);objectStream.writeInt(54367);objectStream.writeObject(Hellothere);objectStream.writeObject(newDate();objectStream.flush();catch(Exceptione)System.out.println(e.toString();第第8 8章章 网络编程概述网络编程概述 8.2.4实例本节最后再来看几个使用URL、URLConnection类的实
49、例。程序8.8实现了一个Applet,运行画面如图8.5所示,在下拉式列表框中选择搜索引擎名,然后单击“Go”按钮,浏览器将显示对应搜索引擎的主页。第第8 8章章 网络编程概述网络编程概述 图8.5程序8.8运行画面第第8 8章章 网络编程概述网络编程概述 【程序8.8】实例一。importjava.awt.*;importjava.applet.*;importjava.awt.event.*;.*;.URL;.MalformedURLException;第第8 8章章 网络编程概述网络编程概述 publicclassListLinkextendsAppletimplementsActionListenerStringurlList=http:/ 8章章 网络编程概述网络编程概述 publicvoidinit()urlChoice=newChoice();Buttonbtn=newButton(Go);for(inti=0;i3;i+)urlChoice.addItem(urlNamei);第第8 8章章 网络编程概述网络编程概述 add(urlChoice);btn.addActionListener(this);add(btn);publicvoidactionPerformed(ActionEventev)Stringlabel=ev.getActionCommand(
限制150内