《Java 第11章 Java 中的网络编程.ppt》由会员分享,可在线阅读,更多相关《Java 第11章 Java 中的网络编程.ppt(34页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第11章章 Java 中的网络编程中的网络编程 本章导读本章导读n1.URL类n2.读取URL中的资源n3.显示URL资源中的HTML文件n4.处理超链接n5.InetAddress类n6.套接字Socketn7.使用多线程处理套接字连接n8.UDP数据报n9.广播数据包11.1 URL类 URL创建对象的应用程序称作客户端程序,一个URL对象存放着一个具体的资源的引用,利用URL对象可以获取URL中的资源。一个URL对象通常包含最基本的三部分信息:协议、地址、资源。常用的Http、Ftp、file协议都是虚拟机支持的协议;地址必须是能连接的有效IP地址或域名;资源可以是主机上的任何一个文件
2、。1URL的构造方法public URL(String spec)throws MalformedURLException该构造方法使用字符串初始化一个URL对象,例如try url=new URL(http:/);catch(MalformedURLException e)System.out.println(Bad URL:+url);该URL对象使用的协议是“Http”协议,即用户按着这种协议和指定的服务器通信,该URL对象包含的地址是“”,所包含的资源是默认的资源(主页)。public URL(String protocol,String host,String file)throws
3、 MalformedURLException该构造方法构造的URL对象的协议、地址和资源分别由参数protocol、host和file指定返回11.2读取URL中的资源 URL对象调用 InputStream openStream()方法可以返回一个输入流,该输入流指向URL对象所包含的资源。通过该输入流可以将服务器上的资源信息读入到客户端。下面的例子1在一个文本框中输入网址,然后点击确定按钮读取服务器上的资源,由于网络速度或其它的因素,URL资源的读取可能会引起堵塞,因此,程序需在一个线程中读取URL资源,以免堵塞主线程。返回11.3显示URL资源中的html文件 Javax.swing包中
4、的JEditorPane类可以解释执行html文件,也就是说,如果你把html文件读入到JEditorPane,该html文 件 就 会 被 解 释 执 行,显 示 在JEditorPane中,这样程序就看到了网页的运行效果。可以使用JEditorPane类的构造方法:public JEditorPane()public JEditorPane(URL initialPage)throws IOException public JEditorPane(String url)throws IOException构造JEditorPane对象,后两个构造方法使用参数initialPage或url指
5、定该对象最初显示的URL中的资源。JEditorPane对象调用 public void setPage(URL page)throws IOException法可以显示新的URL中的资源。在下面的例子2中,我们用JEditorPane对象显示网页。返回11.4处理超链接 程序可以通过处理HyperlinkEvent事件,来显示新的URL资源。JEditorPane对象调用 addHyperlinkListener(HyperlinkListener listener)获得监视器。监视器需实现HyperlinkListener接口,该接口中的方法是:voidhyperlinkUpdate(Hy
6、perlinkEvente)在下面的例子3中,当单击超链接时,JEditorPane对象将显示超链接所链接的网页。返回11.5 InetAdress类 InetAddress类对象含有一个Internet主机地址的域名和IP地址: InetAddress类的静态方法:getByName(String s);获得一个InetAddress对象,该对象含有主机地址的域名和IP地址,该对象用如下格式表示它包含的信息: 端口号与IP地址的组合得出一个网络套接字。端口号被规定为一个16位的整数065535。其中,01023被预先定义的服务通信占用(如telnet占用端口23,http占用端口80等)。除
7、非我们需要访问这些特定服务,否则,就应该使用102465535这些端口中的某一个进行通信,以免发生端口冲突。1套接字连接所谓套接字连接就是客户端的套接字对象和服务器端的套接字对象通过输入、输出流连接在一起,现在我们分三个步骤来说明套接字连接的基本模式。(1)服务器建立ServerSocket对象 ServerSocket对象负责等待客户端请求建立套接字连接ServerSocket的构造方法是:ServerSocket(int port)try ServerSocket waitSocketConnection=new ServerSocket(1880);catch(IOException e
8、)当服务器的ServerSocket对象waitSocketConnection建立后,就可以使用方法accept()接受客户的套接字连接请求,代码如下所示:waitSocketConnection.accept();所谓“接收”客户的套接字请求,就是accept()方 法 会 返 回 一 个 Socket对 象:socketAtServer,称作服务器端的套接字对象。(2)客户端创建Socke对象。客户端程序可以使用Socket类创建对象,Socket的构方法是:Socket(String host,int port)参数host是服务器的IP地址,port是一个端口号。也可以使用Socke
9、t类不带参数的构造方法 public Socket()该对象再调用 public void connect(SocketAddress endpoint)throws IOException请求和参数SocketAddress指定地址的套接字建立连接。客户端建立socketAtClient对象的过程就是向服务器发出套接字连接请求,如果服务器端相应的端口上有ServerSocket对象正在使用accept方法等待客户,那么双 方 的 套 接 字 对 象 socketAtClient和socketAtServer就都诞生了。(3)流连接客户端和服务器端的套接字对象诞生以后,还必须进行输入、输出流的
10、连接。服务器端的这个Socket对象socketAtServer使用方法getOutputStream()获得的输出流将指向客户端Socket对象socketAtClient 使用方法getInputStream()获得的那个输入流;同样,服务器端的这个Socket对象ocketAtServer使用方法 getInputStream()获得的输入流将指向客户端Socket对象socketAtClient使用方法 getOutputStream()获得的那个输出流。因此,当服务器向这个输出流写入信息时,客户端通过相应的输入流就能读取,反之亦然。图11.3套接字连接示意图客 户 端Socket输入
11、流输出流服 务 器 端Socket输出流输入流连接连接在例子5中,客户端向服务器发出ASCII表的顺序值:1127;服务器接受这些数据,并将顺序值对应的字符返回给客户。你 首 先 将 例 子 5中 服 务 器 端 的Server.java编译通过,并运行起来,等待客户请求连接。然后运行客户端程序。返回11.7使用多线程处理套接字连接 在下面的例子6中,客户输入一个一元二次方程的系数并发送给服务器,服务器把计算出的方程的实根返回给客户。因此你可以将计算量大的工作放在服务器端,客户负责计算量小的工作,实现客户-服务器交互计算,来完成某项任务。返回11.8 UDP数据报 基于UDP通信的基本模式是(
12、1)将数据打包,称为数据包(好比将信件装入信封一样),然后将数据包发往目的地。(2)接受别人发来的数据包(好比接收信封一样),然后查看数据包中的内容。1发送数据(1)创建DatagramPacket对象首 先 用 DatagramPacket类 将 数 据 打 包,即 用DatagramPacket类创建一个对象,称为数据包。返回用DatagramPacket的以下两个构造方法创建待发送的数据包:DatagramPacket(bytedata,intlength,InetAddtressaddress,intport)DatagramPack(byte data,int offset,int
13、length,InetAddtress address,int port)使用构造方法创建的数据包对象具有下列两个性质:含有data数组指定的数据。该数据包将发送到地址是address、端口号是port的主机上。我们称address是它的目标地址、port是这个数据包的目标端口号。其中,第2个构造方法创建的数据包对象含有数组data从offset开始指定长度的数据。例如:bytedata=近来好吗.getByte();InetAddtressaddress=InetAddtress.getName();DatagramPacketdata_pack=newDatagramPacket(data
14、,data.length,address,980);(2)发送数据然后用 DatagramSocket类的不带参数的构造方法:DatagramSocket()创建一个对象,该对象负责发送数据包。例如,DatagramSocket mail_out=new DatagramSocket();mail_out.send(data_pack);2接收数据 DatagramSocket类另一个构造方法:DatagramSocket(int port)创建一个对象,其中的参数必须和待接收的数据包的端口号相同。例如,如果发送方发送的数据包的端口号是5666:DatagramSocket mail_in=n
15、ew DatagramSocket(5666);该对象mail_in使用方法receive(DatagramPacket pack 接受数据包。该方法有一个数据包参数pack,方法receive把收到的数据包传递给该参数。因此我们必须预备一个数据包以便收取数据包。这时需使用 DatagramPack类的另外一个构造方法:DatagramPack(byte data,int length)创建一个数据包,用于接收数据包,例如:byte data=new byte100;int length=90;DatagramPacket pack=newDatagramPacket(data,length)
16、;mail_in.receive(pack);该数据包pack将接收长度是length的数据放入data。在下面的例子7中两个主机(可用本地机模拟)互相发送和接收数据包。返回11.9广播数据包 广播数据包类似于电台广播,进行广播的电台需在指定的波段和频率上广播信息,接收者只有将收音机调到指定的波段、频率上才能收听到广播的内容。广播数据包涉及到地址和端口。我们知道,Internet的地址是a.b.c.d的形式。该地址的一部分代表用户自己主机,而另一部分代表用户所在的网络。当a小于128,那么b.c.d就用来表示主机,这类地址称做A类地址。如果a大于等于128并且小于192,则a.b表示网络地址,
17、而c.d表示主机地址,这类地址称做B类地址。如果a大于等于192,则网络地址是a.b.c,d表示主机地址,这类地址称做C类地址。224.0.0.0与239.255.255.255之间的地址称做D类地址,D类地址并不代表某个特定主机的位置,一个具有A、B或C类地址的主机要广播数据或接收广播,都必须加入到同一个D类地址。一个D类地址也称做一个组播地址,加入到同一个组播地址的主机可以在某个端口上广播信息,也可以在某个端口号上接收信息。准备广播或接收的主机需经过下列步骤:1设置组播地址使用InetAddress类创建组播组地址,例如:InetAddressgroup=InetAddress.getBy
18、Name(239.255.8.0);2创建多点广播套接字使用MulticastSocket类创建一个多点广播套接字对象。MulticastSocket的构造方法:public MulticastSocket(int port)throws IOException创建的多点广播套接字可以在参数指定的端口上广播。3设置广播的范围准备广播的主机必须让多点广播套接字(MulticastSocket)对象调用 public void setTimeToLive(int ttl)throws IOException 4加入组播组准备广播或接收的主机必须让多点广播套接字(MulticastSocket)对象
19、调用 public void joinGroup(InetAddress mcastaddr)throws IOException方法加入组播组。多点广播套接字(MulticastSocket)对象调用 public void leaveGroup(InetAddress mcastaddr)throws IOException方法可以离开已经加入的组播组。5广播数据和接收数据进行广播的主机可以让多点广播套接字(MulticastSocket)对象调用 public void send(DatagramPacket p)throws IOException将参数p指定的数据包广播到组播组中的其它主机。接收广播的主机可以让多点广播套接字(MulticastSocket)对象调用 public void receive(DatagramPacket p)throws IOException在下面的例子8中,一个主机不断地重复广播奥运会新闻,加入到同一组的主机都可以随时接收广播的信息。接收者将正在接收的信息放入一个文本区,把已接收到的全部信息放入另一个文本区。返回
限制150内