Java2实用教程第4版-第13章-Java网络编程.ppt

上传人:牧羊曲112 文档编号:5435940 上传时间:2023-07-06 格式:PPT 页数:25 大小:392KB
返回 下载 相关 举报
Java2实用教程第4版-第13章-Java网络编程.ppt_第1页
第1页 / 共25页
Java2实用教程第4版-第13章-Java网络编程.ppt_第2页
第2页 / 共25页
Java2实用教程第4版-第13章-Java网络编程.ppt_第3页
第3页 / 共25页
Java2实用教程第4版-第13章-Java网络编程.ppt_第4页
第4页 / 共25页
Java2实用教程第4版-第13章-Java网络编程.ppt_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《Java2实用教程第4版-第13章-Java网络编程.ppt》由会员分享,可在线阅读,更多相关《Java2实用教程第4版-第13章-Java网络编程.ppt(25页珍藏版)》请在三一办公上搜索。

1、第 1 页1 页,注意:开始用功了!,第 1 页2 页,Java2实用教程(第4版)第13章,配合例子源代码一起使用,Power point 制作:耿祥义 张跃平,Java网络编程,第 1 页3 页,导读,主要内容URL类InetAdress类套接字UDP数据报广播数据报Java远程调用(RMI),第 1 页4 页,13.1 URL类,URL类是包中的一个重要的类,URL的实例封装着一个统一资源定位符(Uniform Resource Locator),使用URL创建对象的应用程序称作客户端程序。一个URL对象通常包含最基本的三部分信息:协议、地址、资源。,第 1 页5 页,13.1.1 UR

2、L的构造方法,URL类通常使用如下的构造方法创建一个URL对象:public URL(String spec)throws MalformedURLException public URL(String protocol,String host,String file)throws MalformedURLException,第 1 页6 页,13.1.2 读取URL中的资源,URL对象调用 InputStream openStream()方法可以返回一个输入流,该输入流指向URL对象所包含的资源。通过该输入流可以将服务器上的资源读入到客户端。,例子1(Example13_1.java,Loo

3、k.java)用户在命令行窗口输入网址,读取服务器上的资源.运行效果如图13.1.,第 1 页7 页,13.2 InetAdress类 13.2.1 地址的表示,Internet上的主机有两种方式表示地址:1域名 例如 2IP地址 例如 包中的InetAddress类对象含有一个Internet主机地址的域名和IP地址,例如。,第 1 页8 页,13.2.2 获取地址,1获取Internet上主机的地址可以使用InetAddress类的静态方法getByName(String s);获得一个InetAddress对象,该对象含有主机地址的域名和IP地址,该对象用如下格式表示它包含的信息:2获取

4、本地机的地址我们可以使用InetAddress类的静态方法getLocalHost()获得一个InetAddress对象,该对象含有本地机的域名和IP地址。例子2,第 1 页9 页,13.3 套接字 13.3.1 套接字,IP地址标识Internet上的计算机,端口号标识正在计算机上运行的进程(程序)。端口号被规定为一个16位的065535之间的整数。当两个程序需要通信时,它们可以通过使用Socket类建立套接字对象并连接在一起(端口号与IP地址的组合得出一个网络套接字)。,第 1 页10 页,13.3.2 客户端套接字,客户端的程序使用Socket类建立负责连接到服务器的套接字对象。建立连接

5、到服务器的套接字对象:try Socket mysocket=new Socket(“http:/192.168.0.78”,1880);catch(IOException e)与mysocket相关的方法 getInputStream()获得一个输入流 getOutputStream()获得一个输出流 用getInputStream()得到的输入流接到另一个DataInputStream数据流上 用getOutputStream()得到的输出流接到另一个DataOutputStream数据流上,第 1 页11 页,13.3.3 ServerSocket对象与服务器端套接字_1,服务器必须建立

6、一个ServerSocket对象,该对象通过将客户端的套接字对象和服务器端的一个套接字对象连接起来,从而达到连接的目的。建立ServerSocket对象:try ServerSocket serverForClient=new ServerSocket(2010);catch(IOException e)使用方法accept()将客户的套接字和服务器端的套接字连接起来,代码如下所示:try Socket sc=serverForClient.accept();catch(IOException e)所谓“接收”客户的套接字连接就是accept()方法会返回一个和客户端Socket对象相连接的S

7、ocket对象。,第 1 页12 页,13.3.3 ServerSocket对象与服务器端套接字_2,客户端的套接字获得的输入输出流和服务器端的套接字获得的输出输入流互相连接.,第 1 页13 页,例子3中,客户端向服务器问了三句话,服务器都给出了一一的回答。首先将例子3中服务器端的Server.java编译通过,并运行起来,等待客户的呼叫,然后运行客户端程序。客户端运行效果如图13.3,服务器端运行效果如图13.4。,客户端(Client.java),服务器端(Server.java),第 1 页14 页,13.3.4 使用多线程技术,为了防止堵塞线程,服务器端收到一个客户的套接字后,就应该

8、启动一个专门为该客户服务的线程。在下面的例子4中,客户使用Socket类不带参数的构造方法Socket()创建一个套接字对象,该对象需调用 public void connect(SocketAddress endpoint)throws IOException请求和参数SocketAddress指定地址的套接字建立连接。,为了使用connect方法,可以使用SocketAddress的子类InetSocketAddress创建一个对象,InetSocketAddress的构造方法是:InetSocketAddress(InetAddress addr,int port),第 1 页15 页,

9、例子4中,客户输入圆的半径并发送给服务器,服务器把计算出的圆的面积返回给客户。因此可以将计算量大的工作放在服务器端,客户负责计算量小的工作,实现客户-服务器交互计算,来完成某项任务。首先将例子4中服务器端的程序编译通过,并运行起来,等待客户的呼叫。客户端运行效果如图13.6,服务器端运行效果如图13.7。,客户端(Client.java,Read.java),服务器端(Server.java),第 1 页16 页,13.4 UDP数 据 报,基于UDP的通信和基于TCP的通信不同,基于UDP的信息传递更快,但不提供可靠性保证。基于UDP通信的基本模式是:1将数据打包,称为数据包(好比将信件装入

10、信封一样),然后将数据包发往目的地。2接受别人发来的数据包(好比接收信封一样),然后查看数据包中的内容。,第 1 页17 页,13.4.1 发送数据包,1.用DatagramPacket类将数据打包,即用DatagramPacket类创建一个对象,称为数据包。用DatagramPacket的以下两个构造方法创建待发送的数据包:DatagramPacket(byte data,int length,InetAddtress address,int port)DatagramPack(byte data,int offset,int length,InetAddtress address,int

11、port)2用DatagramSocket类的不带参数的构造方法:DatagramSocket()创建一个对象,该对象负责发送数据包。例如:DatagramSocket mail_out=new DatagramSocket();mail_out.send(data_pack);,第 1 页18 页,13.4.2 接收数据包,1.首先用DatagramSocket的另一个构造方法DatagramSocket(int port)创建一个对象,其中的参数必须和待接收的数据包的端口号相同。例如,如果发送方发送的数据包的端口是5666,那么如下创建DatagramSocket对象:DatagramSo

12、cket mail_in=new DatagramSocket(5666);2.然后对象mail_in使用方法receive(DatagramPacket pack)接受数据包。3.用 DatagramPack类的另外一个构造方法:DatagramPack(byte data,int length)创建一个数据包,用于接收数据包,例如:byte data=new byte100;int length=90;DatagramPacket pack=new DatagramPacket(data,length);mail_in.receive(pack);该数据包pack将接收长度是length字

13、节的数据放入data。,第 1 页19 页,例子5中:张山和李四使用用户数据报(可用本地机模拟)互相发送和接收数据包,程序运行时“张三”所在主机在命令行输入数据发送给“李四”所在主机,将接收到的数据显示在命令行的右侧(效果如图13.8);同样,“李四”所在主机在命令行输入数据发送给“张三”所在主机,将接收到的数据显示在命令行的右侧(效果如图13.9)。,“张三”主机(ZhanSan.java,ReceiveLetterForZhang.java),“李四”主机(LiSi.java,ReceiveLetterForLi.java),第 1 页20 页,13.5 广播数据报,广播数据报涉及到地址和

14、端口。广播数据报是一种较新的技术,要广播或接收广播的主机都必须加入到同一个D类地址。,广播端(BroadCast.java),例子6中,一个主机不断地重复广播放假通知,加入到同一组的主机都可以随时接收广播的信息.,接收端(Receiver.java),第 1 页21 页,13.6 Java 远程调用(RMI),Java远程调用,RMI(Remote Method Invocation)是一种分布式技术,使用RMI可以让一个虚拟机(JVM)上的应用程序请求调用位于网络上另一处的JVM上的对象方法。习惯上称发出调用请求的虚拟机(JVM)为(本地)客户机,称接受并执行请求的虚拟机(JVM)为(远程)

15、服务器。,第 1 页22 页,13.6.1 远程对象及其代理,1.远程对象:驻留在(远程)服务器上的对象是客户要请求的对象,称作远程对象。2代理与存根(Stub):代理的特点是它与远程对象实现了相同的接口。存根(Stub):一种特殊的字节码,并让这个存根产生的对象为作为远程对象的代理。3Remote接口 RMI为了标识一个对象是远程对象,即可以被客户请求的对象,要求远程对象必须实现java.rmi包中的Remote接口,也就是说只有实现该接口的类的实例才被RMI认为是一个远程对象。,第 1 页23 页,13.6.2 RMI的设计细节,1扩展Remote接口 定义一个接口是java.rmi包中R

16、emote的子接口,即扩展Remote接口。RemoteSubject.java 2远程对象 创建远程对象的类必须要实现Remote接口,RMI使用Remote接口来标识远程对象,但是Remote中没有方法,因此创建远程对象的类需要实现Remote接口的一个子接口。RemoteConcreteSubject.java 3存根(Stub)与代理:RMI使用rmic命令生成存根 RemoteConcreteSubject_Stub.class 4启动注册rmiregistry:执行rimregistry命令 5启动远程对象服务:远程服务器使用java.rmi包中的Naming类调用其类方法rebi

17、nd(String name,Remote obj)绑定一个远程对象到rmiregistry所管理的注册表中,该方法的name参数是URL格式,obj参数是远程对象,将来客户端的代理会通过name 找到远程对象obj。BindRemoteObject.java 6运行客户端程序:远程服务器启动远程对象服务后,客户端就可以运行有关程序,访问使用远程对象。ClientApplication.java,第 1 页24 页,13.7 应用举例,查询服务器上数据库表的记录是最常见网络应用程序,本节利用套接字技术实现应用程序中对数据库的访问。应用程序只是利用套接字连接向服务器发送一个查询的条件,而服务器负责对数据库的查询,然后服务器再将查询的结果利用建立的套接字返回给客户端。将例子7中的服务器端代码编译通过,并运行起来,如图13.17所示。客户端输入车号或车名查询效果如图13.18,服务器端 Server.java,Target.java,客户端(Client.java),第 1 页25 页,

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号