




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.1 页1注意:开始用功了!注意:开始用功了!.2 页2Java2实用教程实用教程(第第4版版) 第第13章章配合例子源代码一起使用例子源代码一起使用Power point 制作:耿祥义 张跃平JavaJava网络编程网络编程 .3 页3导读导读主要内容主要内容URL类类InetAdress类类套接字套接字UDP数据报数据报广播数据报广播数据报Java远程调用远程调用(RMI).4 页413.1 URLURL类类 URLURL类是类是包中的一个重要的类,包中的一个重要的类,URLURL的实的实例封装着一个统一资源定位符例封装着一个统一资源定位符( (Uniform Resource Unifo
2、rm Resource Locator)Locator),使用使用URLURL创建对象的应用程序称作客户端创建对象的应用程序称作客户端程序。程序。 一个一个URLURL对象通常包含最基本的三部分信息:协议、对象通常包含最基本的三部分信息:协议、地址、资源。地址、资源。 .5 页513.1.1 URLURL的构造方法的构造方法 URL类通常使用如下的构造方法创建一个类通常使用如下的构造方法创建一个URL对象:对象: public URL(String spec) throws MalformedURLException public URL(String protocol, String hos
3、t,String file) throws MalformedURLException .6 页613.1.2 读取读取URLURL中的资源中的资源 URL对象调用对象调用 InputStream openStream() 方法可以返回一个输入流,该输入流指向方法可以返回一个输入流,该输入流指向URL对象所包含的资源。通过该对象所包含的资源。通过该输入流可以将服务器上的资源读入到客户端。输入流可以将服务器上的资源读入到客户端。 例子例子1(Example13_1.java , Look.java )用户在命令行窗用户在命令行窗口输入网址,读取服务器上口输入网址,读取服务器上的资源的资源 .运行
4、效果如图运行效果如图13.1 .7 页713.2 InetAdressInetAdress类类 13.2.1 地址的表示地址的表示 InternetInternet上的主机有两种方式表示地址:上的主机有两种方式表示地址:1 1域名域名 例如例如 2 2IPIP地址地址 例如例如 202.108.35.210202.108.35.210 包中的包中的InetAddressInetAddress类对象含有一个类对象含有一个InternetInternet主机地址主机地址的域名和的域名和IPIP地址,地址,例如例如 。 .8 页813.2.2 获取地址获取地址 1获取获取Internet上主机的地址
5、上主机的地址可以使用可以使用InetAddress类类的静态方法的静态方法getByName(String s);获得一个获得一个InetAddress对象对象,该对象含有主机地址的域名,该对象含有主机地址的域名和和IP地址,该对象用如下格式表示它包含的信息:地址,该对象用如下格式表示它包含的信息: 2获取本地机的地址获取本地机的地址我们可以使用我们可以使用InetAddress类类的静态方法的静态方法getLocalHost()获得一获得一个个InetAddress对象对象,该对象含有本地机的域名和该对象含有本地机的域名和IP地址。地址。 例子例子2 .9 页913.3 套接字套接字 13.
6、3.1 套接字套接字 IPIP地址标识地址标识InternetInternet上的计算机,端口号标识正在计算机上运上的计算机,端口号标识正在计算机上运行的进程(程序)。端口号被规定为一个行的进程(程序)。端口号被规定为一个1616位的位的0 06553565535之间的之间的整数。整数。 当两个程序需要通信时,它们可以通过使用当两个程序需要通信时,它们可以通过使用SocketSocket类建立套类建立套接字对象并连接在一起(端口号与接字对象并连接在一起(端口号与IPIP地址的组合得出一个网络套地址的组合得出一个网络套接字)。接字)。 .10 页1013.3.2 客户端套接字客户端套接字 客户端
7、的程序使用客户端的程序使用Socket类建立负责连接到服务器的套接字类建立负责连接到服务器的套接字对象。对象。建立连接到服务器的套接字对象:建立连接到服务器的套接字对象: try Socket mysocket=new Socket(“”,1880); catch(IOException e) 与与mysocket相关的方法相关的方法 getInputStream()获得一个输入流获得一个输入流 getOutputStream()获得一个输出流获得一个输出流 用用getInputStream()得到的输入流接到另一个得到的输入流接到另一个DataInputStreamDataInputStre
8、am数据流上数据流上 用用getOutputStream()得到的输出流接到另一个得到的输出流接到另一个DataOutputStream数据流上数据流上 .11 页1113.3.3 ServerSocketServerSocket对象与服务器端套接字对象与服务器端套接字_1 _1 服务器必须建立一个服务器必须建立一个ServerSocketServerSocket对象对象,该对象通过将客该对象通过将客户端的套接字对象和服务器端的一个套接字对象连接起来,从户端的套接字对象和服务器端的一个套接字对象连接起来,从而达到连接的目的。而达到连接的目的。 建立建立ServerSocketServerSoc
9、ket对象:对象: try ServerSocket serverForClient =new ServerSocket(2010); catch(IOException e) 使用方法使用方法accept()accept()将客户的套接字和服务器端的套接字连接将客户的套接字和服务器端的套接字连接起来,代码如下所示起来,代码如下所示: try Socket sc= serverForClient .accept(); catch(IOException e) 所谓所谓“接收接收”客户的套接字连接就是客户的套接字连接就是accept()accept()方法会返回一方法会返回一个和客户端个和客户端
10、SocketSocket对象相连接的对象相连接的SocketSocket对象。对象。.12 页1213.3.3 ServerSocketServerSocket对象与服务器端套接字对象与服务器端套接字_2 _2 客户端的套接字获得的输入输出流和服务器端的套接字获得的输出输入流互相连接.13 页13 例子例子3中,客户端向服务器问了三句话,服务器都给出了一一的回答。首先将例子3中服务器端的Server.java编译通过,并运行起来,等待客户的呼叫,然后运行客户端程序。客户端运行效果如图13.3,服务器端运行效果如图13.4。 客户端客户端 (Client.java )服务器端服务器端 (Serv
11、er.java ).14 页1413.3.4 使用多线程技术使用多线程技术 为了防止堵塞线程,服务器端收到一个客户的套接字后,就为了防止堵塞线程,服务器端收到一个客户的套接字后,就应该启动一个专门为该客户服务的线程。应该启动一个专门为该客户服务的线程。 在下面的例子在下面的例子4中,客户使用中,客户使用SocketSocket类不带参数的构造方法类不带参数的构造方法Socket()Socket()创建一个套接字对象,该对象需调用创建一个套接字对象,该对象需调用 public void connect(SocketAddress endpoint) throws IOExceptionpubli
12、c void connect(SocketAddress endpoint) throws IOException请求和参数请求和参数SocketAddressSocketAddress指定地址的套接字建立连接。指定地址的套接字建立连接。为了使用为了使用connectconnect方法,可以使用方法,可以使用S o c k e t A d d r e s sS o c k e t A d d r e s s 的 子 类的 子 类InetSocketAddressInetSocketAddress创建一个对象,创建一个对象,InetSocketAddressInetSocketAddress的构
13、造方法是:的构造方法是:InetSocketAddress(InetAddress addr, int port)InetSocketAddress(InetAddress addr, int port) .15 页15 例子例子4中,客户输入圆的半径并发送给服务器,服务器把计算出的圆的面积返回给客户。因此可以将计算量大的工作放在服务器端,客户负责计算量小的工作,实现客户-服务器交互计算,来完成某项任务。首先将例子首先将例子4中服中服务器端的程序编译通过务器端的程序编译通过,并运行起来,等待客户的呼叫。客户端运行效果如图13.6,服务器端运行效果如图13.7。 客户端客户端 (Client.j
14、ava , Read.java )服务器端服务器端( (Server.java Server.java ) ) .16 页1613.4 UDPUDP数数 据据 报报 基于基于UDPUDP的通信和基于的通信和基于TCPTCP的通信不同,基于的通信不同,基于UDPUDP的的信息传递更快,但不提供可靠性保证。信息传递更快,但不提供可靠性保证。 基于基于UDPUDP通信的基本模式是:通信的基本模式是: 1 1将数据打包将数据打包,称为数据包(好比将信件装入信,称为数据包(好比将信件装入信封一样),然后将数据包发往目的地。封一样),然后将数据包发往目的地。 2 2接受别人发来的数据包接受别人发来的数据包
15、(好比接收信封一样),(好比接收信封一样),然后查看数据包中的内容。然后查看数据包中的内容。 .17 页1713.4.1 发送数据包发送数据包 1 1 . 用用 D a t a g r a m P a c k e tD a t a g r a m P a c k e t 类 将 数 据 打 包 , 即 用类 将 数 据 打 包 , 即 用DatagramPacketDatagramPacket类创建一个对象,称为数据包。用类创建一个对象,称为数据包。用DatagramPacketDatagramPacket的以下两个构造方法创建待发送的数据的以下两个构造方法创建待发送的数据包:包: Datag
16、ramPacket(byte data,int length,InetAddtress address,int port)DatagramPacket(byte data,int length,InetAddtress address,int port) DatagramPack(byte data,int offset,int length,InetAddtress address,int port) DatagramPack(byte data,int offset,int length,InetAddtress address,int port) 2 2用用DatagramSocketD
17、atagramSocket类的不带参数的构造方法:类的不带参数的构造方法:DatagramSocket()DatagramSocket()创建一个对象,该对象负责发送数据创建一个对象,该对象负责发送数据包。例如:包。例如: DatagramSocket mail_out=new DatagramSocket();DatagramSocket mail_out=new DatagramSocket(); mail_out.send(data_pack); mail_out.send(data_pack); .18 页1813.4.2 接收数据包接收数据包 1 1 . 首 先 用首 先 用 D a
18、 t a g r a m S o c k e tD a t a g r a m S o c k e t 的 另 一 个 构 造 方 法的 另 一 个 构 造 方 法DatagramSocket(int port)DatagramSocket(int port) 创建一个对象创建一个对象, ,其中的参数必须和待其中的参数必须和待接收的数据包的端口号相同。例如,如果发送方发送的数据包的接收的数据包的端口号相同。例如,如果发送方发送的数据包的端口是端口是5666,5666,那么如下创建那么如下创建DatagramSocketDatagramSocket对象对象: DatagramSocket mai
19、l_in=new DatagramSocket(5666); DatagramSocket mail_in=new DatagramSocket(5666); 2 2. 然后然后对象对象mail_inmail_in使用方法使用方法receive(DatagramPacket pack)receive(DatagramPacket pack)接受数据接受数据包。包。3.3.用用 DatagramPackDatagramPack类的另外一个构造方法:类的另外一个构造方法:DatagramPack(byte DatagramPack(byte data,int length)data,int len
20、gth)创建一个数据包,用于接收数据包,例如创建一个数据包,用于接收数据包,例如: byte data=new byte100;byte data=new byte100; int length=90; int length=90; DatagramPacket pack=new DatagramPacket(data,length); DatagramPacket pack=new DatagramPacket(data,length); mail_in.receive(pack); mail_in.receive(pack); 该数据包该数据包packpack将接收长度是将接收长度是len
21、gthlength字节的数据放入字节的数据放入datadata。.19 页19 例子例子5中:张山和李四使用用户数据报(可用本地机模拟)互相发送和接收数据包,程序运行时“张三”所在主机在命令行输入数据发送给“李四”所在主机,将接收到的数据显示在命令行的右侧(效果如图13.8);同样,“李四”所在主机在命令行输入数据发送给“张三”所在主机,将接收到的数据显示在命令行的右侧(效果如图13.9)。 “张三张三”主机主机 (ZhanSan.java , ReceiveLetterForZhang.java )“李四李四”主机主机 (LiSi.java , ReceiveLetterForLi.java
22、 ).20 页2013.5 广播数据报广播数据报 广播数据报涉及到地址和端口。广播数据报涉及到地址和端口。 广播数据报是一种较新的技术,要广播或接收广播的主机都必须加入到同广播数据报是一种较新的技术,要广播或接收广播的主机都必须加入到同一个一个D D类地址。类地址。 广播端广播端 (BroadCast.java ) 例子例子6 6中,一个主机不断地重复广播放假通知中,一个主机不断地重复广播放假通知, ,加入到同一组的主机都可加入到同一组的主机都可以随时接收广播的信息以随时接收广播的信息. . 接收端接收端 (Receiver.java ).21 页2113.6 Java Java 远程调用(远
23、程调用(RMIRMI) JavaJava远程调用,远程调用,RMIRMI(Remote Method InvocationRemote Method Invocation)是是一种分布式技术,使用一种分布式技术,使用RMIRMI可以让一个虚拟机可以让一个虚拟机( (JVM)JVM)上上的应用程序请求调用位于网络上另一处的的应用程序请求调用位于网络上另一处的JVMJVM上的对上的对象方法。习惯上称发出调用请求的虚拟机(象方法。习惯上称发出调用请求的虚拟机(JVMJVM)为为(本地)客户机,称接受并执行请求的虚拟机(本地)客户机,称接受并执行请求的虚拟机(JVMJVM)为(远程)服务器。为(远程)
24、服务器。 .22 页2213.6.1 远程对象及其代理远程对象及其代理 1.1.远程对象远程对象: :驻留在(远程)服务器上的对象是客户要请求的对象,称作远驻留在(远程)服务器上的对象是客户要请求的对象,称作远程对象。程对象。 2 2代理与存根代理与存根( (Stub)Stub): : 代理的特点是它与远程对象实现了相同的接口。代理的特点是它与远程对象实现了相同的接口。 存根(存根(StubStub):):一种特殊的字节码,并让这个存根产生的对象为作为远程一种特殊的字节码,并让这个存根产生的对象为作为远程对象的代理。对象的代理。 3Remote接口接口 RMI为了标识一个对象是远程对象,即可以
25、被客户请求的对象,要求远程为了标识一个对象是远程对象,即可以被客户请求的对象,要求远程对象必须实现对象必须实现java.rmi包中的包中的Remote接口,也就是说只有实现该接口的类的接口,也就是说只有实现该接口的类的实例才被实例才被RMI认为是一个远程对象。认为是一个远程对象。.23 页2313.6.2 RMIRMI的设计细节的设计细节 1 1扩展扩展RemoteRemote接口接口 定义一个接口是定义一个接口是java.rmijava.rmi包中包中RemoteRemote的子接口,即扩展的子接口,即扩展RemoteRemote接口。接口。 RemoteSubject.java Remot
26、eSubject.java 2 2远程对象远程对象 创建远程对象的类必须要实现创建远程对象的类必须要实现RemoteRemote接口,接口,RMIRMI使用使用RemoteRemote接口来标识远接口来标识远程对象,但是程对象,但是RemoteRemote中没有方法,因此创建远程对象的类需要实现中没有方法,因此创建远程对象的类需要实现RemoteRemote接接口的一个子接口。口的一个子接口。RemoteConcreteSubject.javaRemoteConcreteSubject.java 3 3存根(存根(StubStub)与代理与代理: :RMIRMI使用使用rmicrmic命令生成存根命令生成存根 RemoteConcreteSubject_Stub.classRemoteConcreteSubject_Stub.class 4 4启动注册启动注
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 山东现代学院《建设项目投资与融资》2023-2024学年第二学期期末试卷
- 平顶山工业职业技术学院《传热学》2023-2024学年第二学期期末试卷
- 江西省丰城市2024-2025学年初三下学期第八次质量监测化学试题含解析
- 内蒙古交通职业技术学院《云计算系统》2023-2024学年第二学期期末试卷
- 昆明医科大学《中医经典专题讲座》2023-2024学年第二学期期末试卷
- 四川省绵阳市安州区2024-2025学年初三下学期4月考生物试题含解析
- 辽宁工业大学《外国语言文学导论(2)》2023-2024学年第二学期期末试卷
- 四川交通职业技术学院《财务案例研究自学》2023-2024学年第二学期期末试卷
- 泉州幼儿师范高等专科学校《竞速轮滑》2023-2024学年第二学期期末试卷
- 四川省内江市东兴区市级名校2025届初三下学期阶段考试语文试题含解析
- 2023学年完整公开课版《Seasons》教学
- 2023年电信天翼云从业考试复习题库(综合版)
- 软件运维服务协议合同范本
- 房屋使用用途分类附表
- 教师评价课件
- 华为简易胜任力素质模型图表
- 高中课本剧-鸿门宴剧本
- 隧洞工程临时用电专项施工方案实用资料
- 考研英语大纲词汇(完美打印版)
- 深圳南山区建设工程施工围挡改造提升
- 劳动节知识问答
评论
0/150
提交评论