《Java面向对象程序设计(第4版)》课件chapter13 网络技术和应用开发_第1页
《Java面向对象程序设计(第4版)》课件chapter13 网络技术和应用开发_第2页
《Java面向对象程序设计(第4版)》课件chapter13 网络技术和应用开发_第3页
《Java面向对象程序设计(第4版)》课件chapter13 网络技术和应用开发_第4页
《Java面向对象程序设计(第4版)》课件chapter13 网络技术和应用开发_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

教学目标13.1Java网络技术概述13.2URL与网络应用13.2.1URL类13.2.2用applet访问URL资源13.2.3Web浏览器的设计13.2.4URLConnection类13.3基于流套接字的客户/服务器通信13.3.1InetAddress类13.3.2Socket类13.3.3ServerSocket类13.3.4基于流套接字的客户/服务器的通信过程13.3.5多线程实现多用户网上聊天教学目标(续)13.4基于数据报套接字方式的客户/服务器通信13.4.1DatagramPacket类13.4.2DatagramSocket类13.4.3基于数据报套接字的客户/服务器的通信应用实例13.1Java网络技术概述Java提供两种网络支持机制:

URL的类用于访问Internet网上资源的应用

Socket通信的类基于TCP/IP协议中传输层接口Socket针对Client/Server模型的网络应用以及实现某些特殊协议的网络应用。网络通信包:包含有网络通信所需要的类和接口

13.1Java网络技术概述基于流套接字(streamsockets)的网络通信应用程序将网络通讯看做是数据流;面向连接的网络服务用于传送的协议是TCP(TransmissionControlProtocol)协议。基于数据报套接字(datagramsockets)的网络通信程序将要传递的数据打包分成一个个小的数据包。服务主机跟客户机是无连接的传送的协议是UDP(UserDatagramProtocol)协议。

13.2URL与网络应用

URL(UniformResourceLocator):用于表示Internet上的网络资源;利用URL对象中提供的方法,可直接读写网络中的数据。一个URL组成:协议名、主机名、端口号、路径文件(文件路径及文件名)。例如,

:80/home/homepage.htm

表示:

协议:http,主机地址:

端口号:80,路径文件:/home/homepage.htm。13.2.1URL类Java将URL封装成URL类.创建URL对象的构造方法:

(1)URL(Stringspec)

用指定的一个String来创建一个URL对象;

(2)URL(Stringprotocol,Stringhost,intport,Stringfile):用指定的协议、主机名、端口号、路径文件来创建一个URL对象

(3)URL(Stringprotocol,Stringhost,Stringfile)

用指定的协议、主机名、路径及文件名来创建URL对象;

(4)URL(URLcontext,Stringspec)

用已存在的URL对象来创建URL对象。13.2.1URL类获取URL对象属性的常用方法:

StringgetProtocol():获取URL传输的协议;

StringgetHost():获取URL的机器名称;

intgetPort():获取URL的端口号;

StringgetFile():获取URL的文件名,包括路径和文件名;

ObectgetContent():获取URL的内容;

InputStramopenStream():打开与URL的连接,返回一个输入流,通过这个输入流读取数据;

URLConnectionopenConnection():返回与URL进行连接的URLConnection对象;13.2.1URL类例13-1URL对象的创建及使用。import.*;publicclassMyurl{publicstaticvoidmain(Stringargs[]) {try{ URLurl=newURL(":80/home/homepage.htm"); System.out.println("theProtocol:“+url.getProtocol()); System.out.println("thehostname:"+url.getHost()); System.out.println("theport:"+url.getPort()); System.out.println("thefile:"+url.getFile()); System.out.println(url.toString()); } catch(MalformedURLExceptione) { System.out.println(e); } }}

13.2.2用Applet访问URL资源

例13-2利用Applet显示网络上其他HTML文档。在IE浏览器执行showdoc.htm文件执行后,将在新的IE窗口中显示163网站的内容。利用applet的AppletContect接口中的方法showDocument(),将使执行Applet的浏览器显示指定的URL资源。

showDocument(URLurl,Stringtarget)target:指定显示URL内容的窗体.Target值为“_bank”

表示在新开的窗体URL资源。//showdoc.javaimportjavax.swing.*;importjava.awt.*;import.*;publicclassshowdocextendsJApplet{ URLdocur=null; publicvoidpaint(Graphicsg){ try{ docur=newURL(""); } catch(MalformedURLExceptione){ System.out.println("CanopetheURL"); } if(docur!=null) getAppletContext().showDocument(docur,"_blank"); }}//showdoc.htm<html><appletcode="showdoc.class"width="600"height="500"></applet></html>13.2.3Web浏览器的设计用application实现一个简单的Web浏览器。使用swingGUI组件JEditorPane,显示Web服务器上的文件内容。JEditorPane组件能显示无格式或带格式的HTML文本。JEditorPane的方法setPage(URLurl),将下载由url定位的文档并显示在JEditorPane组件中。用户在窗体顶部的JTextField中输入URL后,将URL的HTML格式的文本,在JEditorPane中显示。13.2.3Web浏览器的设计

13.2.3Web浏览器的设计如果JEditorPane含有的HTML文档中含有超链接,当用户单击其中一个超链接时,则JEditorPane产生事件HyperlinkEvent(javax.swing.event包中),并通知所有已注册的HyperlinkListener对象。HyperlinkListener接口的方法hyperlinkUpdate()处理超链接事件HyperlinkEvent:在JEditorPane中显示超链接的Web网页。13.2.3Web浏览器的设计wcontentsArea.addHyperlinkListener(newHyperlinkListener(){

//ifuserclickedhyperlink,gotospecifiedpagepublicvoidhyperlinkUpdate(HyperlinkEventevent){if(event.getEventType()==

HyperlinkEvent.EventType.ACTIVATED)getThePage(event.getURL().toString());}});HyperlinkEvent类中包含一个嵌套内部类EventType,此内部类声明的三个静态常量:ACTIVED(表示用户单击一个超链接以改变Web网页)ENTERED(表示用户把鼠标移到一个超链接上)EXITED(表示用户把鼠标移离一个超链接)。13.2.3Web浏览器的设计例13-3用Java的应用程序实现一个简单的Web浏览器。

假定用户在窗体顶部的JTextField中输入google的Web地址后,将在JEditorPane中显示google的Web页面。用户单击其中一个超链接“高级搜索”,将显示超链接“高级搜索”的Web网页

13.2.4URLConnection类URLConnection是一个抽象类,它提供了与URL资源的双向通信(读写操作)。URLConnection对象的构造:

通过调用URL对象的方法:URLConnectionopenConnection()

来得到一个URLounechon对象,但这并未建立与指定的URL的连接,还必须调用URLConnection对象的connect()方法建立连接。13.2.4URLConnection类URLConnection对象的常用方法:

voidconnect():打开到此URL引用的资源的通信链接。

intgetContentLength():获得文件的长度;

StringgetContentType():获得文件的类型;

longgetDate():获得文件创建的时间;

longgetLastModified()//获得文件最后修改的时间;

InputStreamgetInputStream()

:获得输入流,以便读取文件的数据;

OutputStreamgetOutputStream()

:获得输出流,以便写文件。

13.2.4URLConnection类例13-4从Web服务器上将URL文件下载到本机,并将文件的信息显示到屏幕。该程序运行后,将文件:80/home/homepage.htm

下载到本机的当前文件夹下,并在屏幕上输出文件homepage.htm内容。

13.3基于流套接字的客户/服务器通信

基于流套接字的数据传递方式:在两个网络应用程序(服务器应用和客户机应用)之间发送和接收信息时,需要建立一个可靠的连接。Java中与流套接字相关的类:InetAddress对象描绘了32位或128位IP地址ServerSocket对象用在服务器应用中Socket对象是建立网络连接时使用的Internet上通过IP地址或域名标识主机,而类InetAddress用来表示与Internet地址的相关的操作。InetAddress类没有构造方法,要创建该类的实例对象,通过该类的静态方法获得该对象。13.3.1InetAddress类

13.3.1InetAddress类InetAddress类的常用一组静态方法:

InetAddressgetLocalHost():获得本地机的InetAddress对象。

InetAddressgetByName(Stunghost):获得由host指定的InetAddress对象,host是计算机的域名。

InetAddress[]getAllmyName(Stringhost):在Web中,可以用相同的名字代表一组计算机获得具有相同名字的一组InetAddress对象。

13.3.1InetAddress类InetAddrss对象的常用一组方法:

byte[]getAddress():得到IP地址;

StringgetHostName():得到主机名字;

StringtoString():得到主机名和IP地址的字符串。13.3.1InetAddress类例13-5InetAddress类的应用.

程序运行的机器已经与Internet网连接好,程序运行后的输出结果:

import.*;classInternetAddress{ publicstaticvoidmain(Stringargs[]) { try { InetAddressiads; iads=InetAddress.getByName(""); System.out.println("hostname="+iads.getHostName()); System.out.println(iads.toString()); } catch(Exceptione) { System.out.println(e); }}}13.3.2Socket类

Socket是建立网络连接时使用的在连接成功时,客户和服务器应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。当客户程序需要与服务器程序通讯的时候,客户程序在客户机要创建一个Socket对象。Socket类的常用构造方法:(1)Socket(InetAddressaddr,intport)

(2)Socket(Stringhost,intport)

两个构造方法都创建了一个用于连接服务器主机和指定端口的客户端流套接字。

13.3.2Socket类在创建了一个Socket对象,应用程序通过调用Socket对象的getInputStream()方法:获得输入流,以读取对方传送来的信息;通过调用Socket对象的

getOutputStream()方法获得输出流,向对方发送消息。在读写活动完成之后,调用close()方法关闭流和流套接字。例如:

创建了一个服务器应用的主机地址为,端口号为50000的客户端Socket对象,然后从这个新创建的Socket对象中读取输入流和输出流,最后再关闭Socket对象和流。13.3.2Socket类Sockets=newSocket("",50000);InputStreaminputstream=s.getInputStream();OutputStreamoutputstream=s.getOnputStream();….//Readorwritefromtheinputstream/outputstreaminputstream.close();outputstream.close();connection.close();13.3.3ServerSocket类服务器程序需要创建一个ServerSocket对象,用于在指定端口上监听客户端连接请求。ServerSocket类的构造方法:(1)ServerSocket(intport)

在指定端口上创建一个ServerSocket对象。服务器应用使用ServerSocket监听指定的端口,端口建议使用大于1024。(2)ServerSocket(intport,intqueueLength)

Server在指定端口上监听客户端连接请求,并指定允许连接的客户最大数目。

13.3.3ServerSocket类创建一个ServerSocket对象后,接下来服务程序进入无限循环之中.无限循环从调用ServerSocket的accept()方法开始,在调用开始后,accept()方法将导致调用线程阻塞直到连接建立。在建立连接后accept()返回一个最近创建的Socket对象,该Socket对象绑定了客户程序的IP地址或端口号。然后双方就可利用建立起来的流套接字进行通信。

13.3.4基于流套接字的客户/服务器的通信过程

传送数据连接成功请求连接(1)为客户机创建Socket对象注册服务器地址和端口,请求连接连接成功时建立Socket连接对象(2)用Socket连接创建流对象:OutputStream和InputStream(4)关闭连接,关闭Stream(3)通过流进行通信数据处理用InputStream对象发送数据用OutputStream接受数据创建ServerSocket对象对象(1)创建ServerSocket对象注册服务器端口和允许连接的用户最大数服务器端应用(2)ServerSocket对象.accept()监听来自客户端的连接连接成功时建立Socket连接对象(3)用Socket连接创建流对象:OutputStream和InputStream(4)通过流进行通信数据处理用InputStream对象发送数据用OutputStream接受数据创建ServerSocket对象对象(5)关闭连接,关闭Stream客户端应用13.3.4基于流套接字的客户/服务器的通信过程例子说明如何建立服务器的应用和客户机的应用。

例13-7客户端的应用.运行输出结果:例13-6服务器端的应用.运行输出结果:13.3.5多线程实现多用户网上聊天

实现多用户网上能同时聊天,由于存在单个服务器程序与多个客户程序通讯的可能,要求:l

服务器程序响应客户程序不应该花很多时间,否则客户程序在得到服务前有可能花很多时间来等待通讯的建立l

还有,服务程序和客户程序的会话有可能是很长的(与电话类似)为了加快对客户程序连接请求的响应,典型的方法:服务器主机在响应每一个客户连接请求时运行一个后台通信服务线程,这个后台线程处理和客户程序之间的通讯。又由于在服务器主机上创建每一个后台通信服务线程,都需要花费一定的主机资源,因此对允许与服务器连接的客户数应有一个限制。13.3.5多线程实现多用户网上聊天

例13-8服务器聊天程序的实现.ChatServer.java声明了一个外部类ChatServer和一个内部类CommunicationThread。在ChatServer类的main()方法:创建了一个ChatServer对象,并通过调用构造方法来创建ServerSocket对象,以监听端口50000上的连接请求,如果连接成功,ChatServer进入一个无限循环中,交替调用ServerSocket的accept()方法来等待连接请求,同时启动后台线程处理连接(accept()返回的请求)。后台线程由CommunicationThread继承的start()方法开始,并执行CommunicationThread的run()方法中的代码。一旦run()方法运行,线程将向当前连接的客户应用发送用户号clientID,接着循环读此用户发送来的聊天信息,并转发给当前参与聊天的各个用户,直到此用户发出信息“stopchat”为止。运行ChatServer.class后,就可以运行多个ChatClient程序。

13.3.5多线程实现多用户网上聊天

例13-9客户端聊天程序的实现.客户端聊天程序是一个Applet。功能:提供客户聊天界面,用于输入信息和显示信息;接受通过服务器转发的其它客户聊天信息并显示。两个客户端聊天程序的界面:

13.4基于数据报套接字方式的客户/服务器通信

数据报套接字:无连接的的数据传递方式。它的传输速度快,但不能保证所有数据都能到达目的地,所以一般用于非重要的数据传输。与数据报套接字相关的有三个类,位于包。DatagramPacket类:用来创建数据包DatagramSocket:用于发送和接收数据包的套接字MulticastSocket:描绘了能进行多点传送的套接字,13.4.1DatagramPacket类使用数据报方式首先将数据打包.DategramPacket类用来创建数据包。数据包分有两种:要发送数据的数据包,该数据包有要到达的目的地址;用来接收数据的数据包。

(1)要创建接受数据包,使用DatagramPackett类的构造方法:

DatagramPacket(byteibuft[],intilength)

ibuf[]:接受数据包的存储数据的缓冲区,

ilength:从传递过来的数据包中读取的字节数。13.4.1DatagramPacket类(2)要创建发送数据包,使用DatagramPacket类的构造方法:

DatagramPacket(bytibuf[],intilength,InetAddrssiaddr,intport)

ibuf:要发送数据的缓冲区;

ilength:发送数据的字节数;

iaddr:数据包要传递到的目标地址;

iport:目标地址的程序接受数据包的端口号。13.4.1DatagramPacket类DatagramPacket数据包对象的操作方法,以获取数据包的信息:(1)netAddrssgetAddrss()

获得数据包要发送的目标地址(2)byte[]getData()

获得数据包中的数据(3)publicintgetLength()

获得数据包中数据的长度(4)intgetPOrt()

获得数据包中的目标地址的主机端口号

13.4.2DatagramSocket类

发送和接收数据包,需要发送和接收数据包的DatagramSocket对象,用DatagramSocket类构造此对象。DatagramSocket类的构造方法如下:(1)Datagramsocket():用本地机上任何一个可用的端口,创建一个发送或接收数据包的套接字。(2)DatagramSocket(intport)用一个指定的端口,创建一个发送/接受数据包的套接字。

13.4.2DatagramSocket类DatagramSocket对象的方法:

(1)voidreceive(Datagrampacketp):接收数据包。(2)voidsend(DatagramPacketp):发送数据包。

(3)intgetLocalPort():得到本地机的端口。13.4.3基于数据报套接字的客户/服务器的通信应用实例

基于数据报套接字的方式下,服务器应用程序和客户机应用程序之间发送和接收信息。完成的功能:在客户端应用程序中,用户在文本框中输入一行信息,按下回车键后,会将此行信息发送到服务器上。服务器接受到此信息后,将此信心在服务器的GUI界面上显示,并完成将此行信息发回到客户机上。客户即收到此信息后,即将此信息显示。

例13-10服务器应用程序的实现.Server.java中完成:构造方法:建立了GUI界面,显示接收到的数据包,建立了的服务器套接字DatagramSocket对象,并将服务器套接字绑定在端口

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论