《网络编程概述》PPT课件.ppt

上传人:牧羊曲112 文档编号:5569432 上传时间:2023-07-29 格式:PPT 页数:197 大小:494KB
返回 下载 相关 举报
《网络编程概述》PPT课件.ppt_第1页
第1页 / 共197页
《网络编程概述》PPT课件.ppt_第2页
第2页 / 共197页
《网络编程概述》PPT课件.ppt_第3页
第3页 / 共197页
《网络编程概述》PPT课件.ppt_第4页
第4页 / 共197页
《网络编程概述》PPT课件.ppt_第5页
第5页 / 共197页
点击查看更多>>
资源描述

《《网络编程概述》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《网络编程概述》PPT课件.ppt(197页珍藏版)》请在三一办公上搜索。

1、第8章 网络编程概述,8.1 概述 8.2 URL编程 8.3 Socket编程简介 实训八 用Java实现网络通信 习题八,8.1 概 述,8.1.1 网络技术基础 Internet上的计算机之间采用TCP/IP协议进行通信,图8.1是TCP/IP协议体系的层次结构。TCP/IP没有对OSI参考模型中的物理层和数据链路层作出规定,只是定义了网络接口,使得TCP/IP协议可以运行在各种硬件设备上。TCP/IP协议的互联网层负责相邻结点之间的数据传送,处理网络的路由选择、流量控制和拥塞控制等问题。,图8.1 TCP/IP协议的层次结构,使用Java语言编写网络通信程序通常是在应用层,对某些特殊的

2、应用可能需要直接基于传输层协议编程,一般无需关心网络通信的具体细节,特别是互联网层和网络接口层。传输层提供在源结点和目标结点的两个进程实体之间提供可靠的端到端的数据传输,TCP/IP模型提供了两种传输层协议,即传输控制协议TCP和用户数据报协议UDP。,TCP协议是面向连接的,在传送数据之前必须与目标结点建立连接,数据传输结束后关闭连接。而UDP是一种无连接协议,可直接传输数据,无需事先建立连接,直接发送带有目标结点信息的数据报。不同的数据报可能经过不同的路径到达目标结点,到达时的顺序与出发时的顺序也可能不同。,采用哪种传输层协议是由应用程序的需要决定的,如果可靠性更重要的话,用面向连接的协议

3、会好一些。比如文件服务器需要保证数据的正确性和有序性,如果一些数据丢失了,系统的有效性将会失去。而有一些服务器是间歇性地发送一些数据块的,如果数据丢失,服务器并不需要再重新发送,因为当数据到达的时候,它可能已经过时了。确保数据的有序性和正确性需要额外的操作和存储空间,这将会降低系统的响应速率。,传输层的上一层是应用层,应用层包括所有的高层协议。早期的应用层有远程登录协议(Telnet)、文件传输协议(File Transfer Protocol,FTP)和简单邮件传输协议(Simple MailTransfer Protocol,SMTP)等。目前使用最广泛的应用层协议是用于从Web服务器读取

4、页面信息的超文本传输协议(Hyper Text Transfer Protocol,HTTP)。,端口(Port)与IP地址一起为网络通信的应用程序之间提供一种确切的地址标识,IP地址标识了发送数据的目的计算机,而端口标识了将数据包发送给目的计算机上的哪一个应用程序,如图8.2所示。应用层协议通常采用客户/服务器模式,应用服务器启动后监听特定的端口,客户端需要服务时请求与服务器该端口建立连接。一些常用的应用服务都有缺省的端口(称为熟知端口),例如Web服务器缺省的端口号为80。,图8.2 端口与IP地址的标识作用,8.1.2 网络编程的基本方法 Java语言专门为网络通信提供了软件包。采用包提

5、供的API可以快速方便地开发基于网络的应用。包对http协议提供了特别的支持。只需通过URL类对象指明图像、声音资源的位置,无需额外的工作,就可以轻松地从Web服务器上获取图像、声音,或者通过流操作获取HTML文档及文本等资源,并可以对获得的资源进行处理。在本书4.1节的案例中从Web服务器下载广告图片就采用了这种方法,可以看出,使用这种方法下载图像是相当简单的。,包还提供了对TCP、UDP协议套接字(Socket)编程的支持,可以建立用户自己的服务器,实现特定的应用。Socket是一种程序接口,最初由California大学Berkeley分校开发,是用于简化网络通信的一种工具,是UNIX操

6、作系统的一个组成部分。现在Socket的概念已深入到各种操作环境,包括Java。,8.2 URL 编 程,8.2.1 URL的概念 URL(Uniform Resource Locator,统一资源定位器)用来标识Internet上的资源,指明取得资源采用的协议和地址,通过URL可以访问Internet上相应的文件和其他资源。典型的URL格式为 协议名:/主机名:端口号/资源路径,协议名用于指明获取资源所用的传输协议,例如http、ftp、gopher等;主机名指明资源所在的计算机,端口号指明服务器的端口号,对于常用的一些协议(如http、ftp等),如果不指明端口号,则使用该协议缺省的熟知端

7、口;资源路径指明该资源在服务器上的虚拟路径。例如:http为协议名,为主机名称,使用缺省的端口80,/为服务器上文件的虚拟路径。,资源路径还可以包含HTML文件中的参考位置(或称为参考点),例如:http:/:80/home/white_paper.html#intro_1 这里,intro_1为white_paper.html中的一个位置。,上面定义的URL形式包含访问网络资源的完整路径,通常称为绝对URL。在HTML文档中通常还会使用相对URL。一个相对URL不包括协议或主机信息,用于指定与当前文档处于相同主机的HTML文档。相对URL可能包括相对路径的成员,也可能是URL片断。例如,在文

8、档中相对URL:,system-configurations.html 表示资源http:/configurations.html。同样,相对URL:也表示该资源。,8.2.2 URL类 1URL对象的创建 用Java语言访问Web资源是通过URL类来实现的,URL类定义了一个Web资源的统一资源定位器和可以对其进行的一些操作。URL类的对象指向Web资源(如Web页、文本文件、图形图像文件、音频视频文件等等),创建URL对象后可取得URL的各个部分的信息和获取URL内容。URL类的构造方法有多种形式,下面是常用的几种形式:,(1)public URL(String spec)throws M

9、alformedURLException:简单地用一个字符串生成URL对象,如:URL url0=new URL(http:/,(2)public URL(String protocol,String host,String file)throws MalformedURLException:分开指定URL的各个部分,包括协议、主机名、资源路径,采用缺省端口构成URL对象,如:URL url1=new URL(http,/j2se/1.4.2/download.html);,(3)public URL(String protocol,String host,int port,String fi

10、le)throws Malformed URLException:分开指定的URL各个部分构成URL对象,如:URL url2=new URL(http,80,/j2se/1.4.2/download.html);(2)、(3)两种构造方法不能构造含有“#参考点”的URL地址。,(4)public URL(URL context,String spec):构造相对URL对象,如:URL base1=new URL(http:/);URL url3=new URL(base,download.html);,这种方法常用于Java Applet。Applet类提供了方法getDocumentBas

11、e和getCodeBase,分别用于获得当前Applet所在页面的目录路径和Applet所在的目录路径,关于这一点程序4.1中已介绍过,本章不再详述。在Applet中可采用类似下面的代码来构造URL对象:URL url1=new URL(getDocumentBase(),file1.txt);URL url2=new URL(getCodeBase(),file2.txt);,URL类的构造方法都抛出MalformedURLException异常,生成URL对象时,必须对这一异常进行处理。例如:try URL myURL=new URL(http:/catch(MalformedURLExc

12、eption e)System.out.println(MalformedURLException:+e);,URL对象创建后,不再可以修改该对象所表示的URL地址,但可以通过URL类提供的方法成员来获取其属性,如协议、主机名、端口号、文件名等。常用的方法有:public int getPort():得到URL对象的端口号;public String getProtocol():得到URL对象的协议名;,public String getHost():得到URL对象的主机名;public String getFile():得到URL对象的文件名;public String getRef():得

13、到URL对象的参考点;public boolean equals(Object obj):比较两个URL,不包括参考点。,2从网络上获取图像 Java Applet可以使用getImage方法直接从Web服务器获取图像资源,目前支持的图像文件格式为GIF和JPEG两种,第4章的程序4.1就采用了这种方法从服务器下载广告图片。下面再来看一个简单的例子。,【程序8.1】使用相对URL从Web服务器获取图像。import java.applet.*;import java.awt.*;public class downImage extends AppletImage image;public vo

14、id init()image=getImage(getDocumentBase(),test.gif);,public void paint(Graphics g)g.drawImage(image,0,0,this);程序8.1获取并显示了图像test.gif。在该例中,首先用语句 getImage(getDocumentBase(),test.gif);,从HTML文档所在位置下载图像test.gif,并创建一个Image类型的对象image,然后在paint方法中用语句 g.drawImage(image,0,0,this);在屏幕上将图像显示出来。Applet类提供的getImage方

15、法有两种形式:Image getImage(URL url,String name);Image getImage(URL url)。,程序8.1采用了第一种形式,图像资源的完整路径由第一个参数表示的路径目录与第二个字符串参数表示的相对URL构成。第二种形式直接使用完整的URL给出图像资源的路径。采用第二种形式代码段形式通常像下面这样:,String url=图像资源URL;Image image;try image=getImage(new URL(url);catch(Exception e)System.out.println(Cant open the URL);,不过,在Java A

16、pplet中一般很少采用绝对URL,因为出于安全性的考虑,浏览器只允许Java Applet访问与Applet同一主机的资源。如果采用绝对URL,则当Applet放到其他的Web服务器上运行时,必须修改程序。,【程序8.2】使用绝对URL从Web服务器获取图像。import java.applet.*;import.*;import java.awt.*;public class getImage extends Applet Image image;public void init()String url=http:/,try image=getImage(new URL(url);catc

17、h(Exception e)public void paint(Graphics g)g.drawImage(image,0,0,this);,程序8.2采用绝对URL,试图显示http:/J+下使用WJView.exe调试时,可以在控制台看到如下信息:com.ms.security.SecurityExceptionExHost:cannot access:80 atcom/ms/security/permissions/NetIOPermission.check(NetIOPermission.java),下面还有若干行,这里省略了。该信息表明getImage方法无法访问,引发了安全性异常

18、SecurityExceptionEx。如果使用JDK的appletviewer运行该程序,输出信息有所不同,getImage方法失败,image对象为null,Graphics类的drawImage方法无法正确绘制图像,从而引发异常。,getImage方法在调用后立即返回,并不等待图像全部载入。因此有时会出现drawImage方法在图像没有载入之前就开始执行了,导致程序刚执行时图像不能正确显示。为解决这个问题,Java提供了MediaTracker类,用于跟踪图像及声音等媒体的载入。MediaTracker使用方法如下:(1)构造一个MediaTracker对象;(2)在下载图像(getIm

19、age)之后,使用addImage方法添加需要跟踪的图像;(3)在显示图像(drawIamge)之前,使用waitForAll方法跟踪图像状态。,例如,程序8.1的init方法可改为:public void init()tryimage=getImage(getDocumentBase(),test.gif);MediaTracker tracker=new MediaTracker(this);/构造一MediaTracker对象tracker.addImage(image,0);/添加需要跟踪的图片,tracker.waitForAll();catch(Exception e)init方法

20、等待图像载入完毕后才返回,以确保paint方法被调用时图像已全部载入。MediaTracker类的构造函数为public MediaTracker(Component comp)即为给定组件创建一个跟踪媒体的MediaTracker对象。,下面是MediaTracker类的几种常用方法:public void addImage(Image image,int id):将图像添加到被跟踪的图像组。参数image为需跟踪的图像,参数id为图像组指定标识。public boolean checkAll():检查所有图像是否下载完毕。public boolean checkAll(boolean lo

21、ad):检查所有图像是否下载完毕。参数load若为true,且图像尚未开始下载,则立即开始下载。,public boolean checkID(int id)。public boolean checkID(int id,boolean load)。以上两种方法用于检查指定id的图像是否完成下载,参数load的含义同checkAll方法。public Object getErrorsAny():返回出错的媒体组。public Object getErrorsID(int id):返回带有给定标识号的出错的媒体组。public boolean isErrorAny():检查所有图像的错误状态。,p

22、ublic boolean isErrorID(int id):检查所有带有给定标识号的图像的错误状态。public void waitForAll()throws InterruptedException:开始下载所有的图像,直到下载完毕后返回。public boolean waitForAll(long ms)throws InterruptedException:开始下载所有的图像,直到下载完毕或参数ms指定的时间(毫秒数)到达后返回。,public void waitForID(int id)throws InterruptedException。public boolean wait

23、ForID(int id,long ms)throws InterruptedException:等待载入指定标识的图像,参数ms的含义同waitForAll方法。public int statusAll(boolean load)。public int statusID(int id,boolean load)。,以上两种方法用于返回所有图像或指定id图像的载入状态,状态取值可以为:ABORTED(下载失败)、COMPLETE(下载成功)、ERRORED(下载时发生错误)、LOADING(正在下载)。参数load若为true,则表示如果图像尚未开始下载,立即启动下载过程。,3从网络上获取声音

24、 与获取图像类似,Java也提供了从Web服务器获取声音资源并播放的方法。Java 2以前的版本只能处理单声道8 kHz的采样频率的AU文件,Java 2增加了对AIFF,WAV以及三种MIDI文件类型的支持。可以利用Applet类的方法play直接播放网络上的声音文件,或使用getAudioClip方法先从网络上获取声音资源,生成AudioClip类型的对象,然后对该对象进行操作。,play方法有两种形式:void play(URL url):使用绝对URL表示声音资源的访问路径。void play(URL url,String name):使用相对URL表示声音资源的访问路径。,类似地,g

25、etAudioClip方法也有两种形式:AudioClip getAudioClip(URL url)AudioClip getAudioClip(URL url,String name)程序8.3采用play方法播放与Applet同目录的AU文件。,【程序8.3】声音资源的播放。import java.applet.*;import java.awt.*;import.*;public class MidiPlay extends Applet public void paint(Graphics g)try,play(getCodeBase(),example.au);catch(Exce

26、ption e),AudioClip是Java语言定义的支持声音播放的接口,该接口定义了下面三个抽象方法:void loop():循环播放该声音资源;void play():开始播放该声音资源;void stop():停止播放该声音资源。利用这三个方法可以控制声音的播放,程序8.4是一个简单的例子。,【程序8.4】用AudioClip接口播放声音资源。import java.awt.*;import java.applet.*;import java.awt.event.*;public class SoundPlay extends Applet implements ActionListe

27、ner,Button playBtn=new Button(播放);Button stopBtn=new Button(停止);Button loopBtn=new Button(循环);AudioClip au;public void init(),playBtn.addActionListener(this);stopBtn.addActionListener(this);loopBtn.addActionListener(this);add(playBtn);add(stopBtn);add(loopBtn);,au=getAudioClip(getCodeBase(),example.

28、au);public void actionPerformed(ActionEvent e)Object obj=e.getSource();if(obj=playBtn)au.play();else if(obj=stopBtn)au.stop();,elseau.loop();程序8.4执行时显示三个按钮,如图8.3所示,点击按钮可以分别调用play、stop、loop方法。,图8.3 声音资源的播放,4显示网络上的其他HTML文档 对于Web服务器上的HTML文档,Java Applet有两种访问方法:一种是由浏览器打开该网页,另一种由Applet直接读取HTML文档。这里先介绍第一种方

29、法,程序4.1中单击广告图片后,浏览器打开一个新窗口浏览指定的网页,采用的就是这种方法。浏览器显示指定网页是利用Applet类的方法getAppletContext来实现的,该方法返回一个AppletContext对象,Java Applet通过该对象访问浏览器。,AppletContext的方法showDocument可以显示指定Web服务器的HTML文档,包括Applet所在服务器以及网络上的其他Web服务器。SowDocument方法有两种形式:void ShowDocument(URL url);void ShowDocument(URL url,String target)。,第一种

30、形式在当前Applet所在的浏览器窗口(或框架,有关内容请参考HTML标准中有关框架的内容)中打开指定的网页;第二种形式在指定的浏览器窗口(或框架中)打开指定的网页。程序8.5演示了ShowDocument方法的使用,程序执行画面如图8.4所示。程序中的窗口名_blank表示始终在新窗口中打开指定网页。,图8.4 程序8.5运行画面,【程序8.5】用浏览器打开指定网页。import java.applet.*;import java.awt.*;import.*;import java.awt.event.*;public class ShowHtml extends Applet imple

31、ments ActionListener,String theURL;Button javaHome=new Button(http:/sunHome=new Button(http:/j2se=new Button(http:/newWin=new Checkbox(Open in new window);public void init()GridBagLayout gbl=new GridBagLayout();,GridBagConstraints gbc=new GridBagConstraints();setLayout(gbl);gbc.gridwidth=gbc.REMAIND

32、ER;gbl.setConstraints(newWin,gbc);add(newWin);,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(this);,gbc.gridwidth=gbc.REMAINDER;gbl.setCons

33、traints(j2se,gbc);add(j2se);j2se.addActionListener(this);public void actionPerformed(ActionEvent e)theURL=e.getActionCommand();,URL urlObj=null;try urlObj=new URL(theURL);catch(MalformedURLException ex)System.out.println(Cant open the URL);,if(urlObj!=null)if(newWin.getState()getAppletContext().show

34、Document(urlObj,_blank);/浏览器新建一个窗口打开指定网页,else getAppletContext().showDocument(urlObj);/浏览器在当前窗口中打开指定网页,5读取网络上文件的内容 上面的方法只是显示或播放网络上结点的图像、声音及HTML文档,没有对其内容进行处理。实际上,Java还可读取网络上文件的内容,并对其内容进行处理。读取网络上文件内容的步骤如下:,(1)创建一个URL类型的对象。例如:String url=http:/fileur;try fileur=new URL(url);catch(MalformedURLException e

35、)System.out.println(Cant get URL:);,(2)利用URL类的openStream方法获得对应的InputStream类的对象。例如:InputStream filecon=fileur.openStream();(3)将InputStream对象转化为DataInputStream类的对象。例如:DataInputStream filedata=new DataInputStream(filecon);(4)读取内容。例如,对上面的filedata,可用filedata.readLine一行一行读取内容,或用filedata.readchar一个字符一个字符地读

36、取。,程序8.6和程序8.7分别演示了Java Applet与Java应用程序读取网络文件的方法,它们的基本步骤相同。但是出于安全性考虑,Applet在浏览器中运行时不允许与Applet所在主机外的其他主机建立联系。Java Application无此限制,此外,当浏览器从本地盘打开调用Java Applet的HTML文档时,也不受此限制。,【程序8.6】下载HTML文件的Java小程序。import java.io.*;import.*;import java.awt.*;import java.applet.*;public class downHtml extends AppletURL

37、 fileur;,TextArea showarea=new TextArea(Please wait a while for gettext,10,30);public void init()try fileur=new URL(getCodeBase(),Page1.htm);catch(MalformedURLException e)System.out.println(Cant get URL:);,add(showarea);public void paint(Graphics g)InputStream filecon=null;DataInputStream filedata=n

38、ull;String fileline;showarea.setText();try,filecon=fileur.openStream();filedata=new DataInputStream(filecon);while(fileline=filedata.readLine()!=null)showarea.append(fileline+n);,catch(IOException e)System.out.println(Error in I/O:+e.getMessage();,【程序8.7】下载HTML文件的Java应用程序。import.*;import java.io.*;p

39、ublic class downHtmlApppublic static void main(String args)if(args.length!=1),System.out.print(Error!);System.exit(1);URL theUrl;try theUrl=new URL(args0);InputStream filecon=theUrl.openStream();String fileline=null;,InputStreamReader fr=new InputStreamReader(filecon);BufferedReader br=new BufferedR

40、eader(fr);while(fileline=br.readLine()!=null)System.out.println(fileline);,catch(Exception e)System.out.println(e.getMessage();程序8.7从命令行获取要下载网页的URL,使用JDK运行时在命令行中输入URL。例如:java downHtmlApp,8.2.3 URLConnection类 上面介绍了使用URL类打开输入流获取网络资源的方法,但有时可能还需要向Web服务器发送信息,例如在程序中使POST方法向Web服务器发送一个表单,必须使用URLConnection类。

41、URLConnection类可提供的信息比URL类要多得多,除了可以获取资源数据外,还可以提供资源长度、发送时间、最新更新时间、编码、标题等许多信息。它是所有Java程序和URL之间创建通信链路的类的抽象超类,可用于连接由 URL 标识的任何资源。该类的对象既可用于从资源中读,也可用于往资源中写。,通常,Java程序无需创建URLConnection类的对象,一旦成功创建一个URL类的对象,可以通过使用openConnection方法来获得URLConnection类的对象。使用openConnection不需要参数,操作成功之后,返回一个URLConnection类的对象。下面的代码段演示了

42、打开一个到URL连接的过程:,try URL url=new URL(http:/);URLConnection connection=url.openConnection();catch(Exception e)System.out.println(e.toString();,一旦成功地建立了一个连接,就可以获得针对这个连接的输出流进行写操作,或者获得针对这个连接的输入流进行读操作。URL可以代表很多不同种类的数据类型所组成的资源,但可以用同样的方式对从URLConnection输入流返回的数据进行操作。下面的程序片断演示了从URL中读取文本数据的方法。,tryURL url=new URL

43、(http:/);URLConnection connection=url.openConnection();InputStream inStream=connection.getInputStream();BufferedReader input=new BufferedReader(new InputStreamReader(inStream);,String line=;while(line=input.readLine()!=null)System.out.println(line);catch(Exception e)System.out.println(e.toString();,

44、进行写操作同样也很简单,建立一个成功的连接之后,首先调用setDoOutput方法将输出(Output)属性设置为真(true),指定该连接可以进行写操作。下面的程序片断演示了如何把数据写入一个URL。try URL url=new URL(http:/);URLConnection connection=url.openConnection();connection.setDoOutput(true);OutputStream outStream=connection.getOutputStream();,ObjectOutputStream objectStream=new ObjectO

45、utputStream(outStream);objectStream.writeInt(54367);objectStream.writeObject(Hello there);objectStream.writeObject(new Date();objectStream.flush();catch(Exception e)System.out.println(e.toString();,8.2.4 实例 本节最后再来看几个使用URL、URLConnection类的实例。程序8.8实现了一个Applet,运行画面如图8.5所示,在下拉式列表框中选择搜索引擎名,然后单击“Go”按钮,浏览器将

46、显示对应搜索引擎的主页。,图8.5 程序8.8运行画面,【程序8.8】实例一。import java.awt.*;import java.applet.*;import java.awt.event.*;import.*;import.URL;import.MalformedURLException;,public class ListLink extends Applet implements ActionListener String urlList=http:/http:/urlName=雅虎中文,Google,新浪;Choice urlChoice;,public void init(

47、)urlChoice=new Choice();Button btn=new Button(Go);for(int i=0;i3;i+)urlChoice.addItem(urlNamei);,add(urlChoice);btn.addActionListener(this);add(btn);public void actionPerformed(ActionEvent ev)String label=ev.getActionCommand();if(label.equals(Go),int ch=urlChoice.getSelectedIndex();LinkTo(ch);void L

48、inkTo(int index)try,URL theURL=new URL(urlListindex);getAppletContext().showDocument(theURL);catch(Exception e),程序8.9的功能与第4章的案例程序4.1相似,不过所显示的广告内容不再固定,而是由adcfg.txt文件确定。该文件与Applet字节码文件存储在相同的位置,Applet初始化时下载该文件,确定显示的广告图片和对应的URL。,【程序8.9】实例二。import java.io.*;import java.awt.*;import java.awt.event.*;impor

49、t java.applet.*;import.*;,class AdCfgApplet applet;String name,imagefile,url;Image image;public AdCfg(String name,String imagefile,String url,Applet applet)this.name=name;this.imagefile=imagefile;,this.url=url;this.applet=applet;image=applet.getImage(applet.getCodeBase(),imagefile);public void Go()t

50、ryURL theURL=new URL(url);,applet.getAppletContext().showDocument(theURL,newwin);catch(Exception e1)public void Draw()applet.getGraphics().drawImage(image,0,0,applet);,public class Ad extends Applet implements Runnable,MouseListenerint CurAd=0,AdCount=0;boolean con=true;AdCfg adcfg=new AdCfg100;publ

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号