孙卫琴网络编程PPT11

合集下载

第11章 对话框和菜单

第11章 对话框和菜单

Visual Basic程序设计教学课件 Basic程序设计教学课件
课件制作:吴文斗 课件制作:
11.1.3 通用对话框
思考题: 设计一个简单的图片浏览程序,可以加载显示图片, 思考题: 设计一个简单的图片浏览程序,可以加载显示图片, 也可保存图片. 也可保存图片.
Visual Basic程序设计教学课件 Basic程序设计教学课件
则在"文件类型"列表框显示下列三种文件类型以供用户选 则在"文件类型" 择
Cocuments(*.DOC) Text Files(*.TXT) All Files|(*.*)
扩展名为DOC的Word文件 的 扩展名为 文件 扩展名为TXT的文本文件 的文本文件 扩展名为 的文本 所有文件 所有文件
Visual Basic程序设计教学课件 Basic程序设计教学课件
cdlCFScreenFonts &H1 屏幕字体 cdlCFPrinterFonts &H2 打印机字体 cdlCFBoth &H3 打印机字体和屏幕字体. 打印机字体和屏幕字体. cdlCFEffects &H100 显示删除线和下划线检查框以及颜色组合框
Visual Basic程序设计教学课件 Basic程序设计教学课件
DialogTiltle FileName InitDir Filter FilterIndex DefaultExt
Visual Basic程序设计教学课件 Basic程序设计教学课件
课件制作:吴文斗 课件制作:
11.1.3 通用对话框
1, "打开"/"另存为"对话框 , 打开" 另存为 另存为"

《网络编程技术》课件

《网络编程技术》课件

后端开发技术
介绍常见的后端开发技术,如服务器端脚本语言(如PHP 、Python等)、数据库(如MySQL、MongoDB等)和 Web服务器(如Apache、Nginx等)。
Web应用安全
分析常见的Web应用安全问题,如跨站脚本攻击(XSS) 、SQL注入等,并提供防范措施和建议。
文件传
FTP协议
Java是一种静态类型的编 程语言,具有跨平台的特 性。
Java还提供了许多用于网 络编程的框架,如Spring Boot、Netty等。
Java提供了丰富的网络编 程API,如Socket、 ServerSocket等。
Java在网络应用服务器、 企业级应用等领域有广泛 的应用。
C网络编程
01 C是一种高效的、静态类型的编程语言。
02
SSL/TLS协议支持多种加密算法和协议版本,能够提供端到端的
安全连接。
SSL/TLS协议广泛应用于网页浏览、电子邮件、即时通讯等领域
03
的通信安全。
06 网络编程发展趋势与展望
云计算在网络编程中的应用
云计算为网络编程提供了强大的 基础设施和资源池,使得开发人 员能够更加高效地构建和部署应
用程序。
套接字编程
套接字是网络编程中的基本概念,通过套接字可以实现不 同计算机之间的通信,常用的套接字编程包括Socket编程 等。
02 网络协议与技术
TCP/IP协议族
总结词
TCP/IP协议族是互联网的基础,它定义了数据如何在不同网络之间传输。
详细描述
TCP/IP协议族包括传输控制协议(TCP)和网际协议(IP)。TCP负责数据的可 靠传输,而IP负责数据的路由。这些协议共同工作,使得各种设备可以在互联 网上通信。

孙卫琴网络编程PPT9

孙卫琴网络编程PPT9
private void writeObject(java.io.ObjectOutputStream out)throws IOException private void readObject(java.io.ObjectInputStream in)throws IOException, ClassNotFoundException;
9.1 JDK类库中的序列化API java.io.ObjectOutputStream代表对象输 出流,它的writeObject(Object obj)方法 对参数指定的obj对象进行序列化,把得 到的字节序列写到一个目标输出流中。 java.io.ObjectInputStream代表对象输入 流,它的readObject()方法从一个源输入 流中读取字节序列,再把它们反序列化 成一个对象,并将其返回。
9.1 JDK类库中的序列化API
对象的反序列化主要包括以下步骤。
(1)创建一个对象输入流,它可以包装一个其他类型的源输 入流,比如文件输入流: ObjectInputStream out=new ObjectInputStream(new FileInputStream("D:\\objectFile.obj")); (2)通过对象输入流的readObject()方法读取对象: String obj1=(String)out.readObject(); //读取一个String对象 Date obj2=(Date)out.readObject(); //读取一个Date对象
9.2.1 序列化对象图
9.2.1 序列化对象图
当通过ObjectOutputStream对象的 writeObject(customer)方法序列化Customer2对象时, 会不会序列化与它关联的Order2对象呢?答案是肯定 的。 在默认方式下,对象输出流会对整个对象图进行序列 化。当程序执行writeObject(customer)方法时,该方 法不仅序列化Customer2对象,还会把两个与它关联的 Order2对象也进行序列化。 当通过ObjectInputStream对象的readObject()方法反 序列化Customer2对象,实际上会对整个对象图反序列 化。

孙卫琴网络编程PPT5

孙卫琴网络编程PPT5

5.2.2 具有自动增长的缓冲区的ChannelIO类
ChannelIO对SocketChannel进行了包装,增加了自动 增长缓冲区容量的功能。当调用 socketChannel.read(ByteBuffer buffer)方法时,如果 buffer已满(即position=limit),那么即使通道中还有 未接收的数据,read方法也不会读取任何数据,而是 直接返回0,表示读到了零个字节。 为了能读取通道中的所有数据,必须保证缓冲区的容 量足够大。在ChannelIO类中,有一个requestBuffer变 量,它用来存放客户的HTTP请求数据,当 requestBuffer剩余容量已经不足5%,并且还有HTTP 请求数据未接收,ChannelIO会自动扩充requestBuffer 的容量,该功能由resizeRequestBuffer()方法完成。
5.1.1 HTTP请求格式 5.1.2 HTTP响应格式 5.1.3 测试HTTP请求
5.2 创建非阻塞的HTTP服务器
5.2.1 5.2.2 5.2.3 5.2.4 5.2.5 类 5.2.6 5.2.7 5.2.8 5.2.9 服务器主程序:HttpServer类 具有自动增长的缓冲区的ChannelIO类 负责处理各种事件的Handler接口 负责处理接收连接就绪事件的AcceptHandler类 负责接收HTTP请求和发送HTTP响应的RequestHandler 代表HTTP请求的Request类 代表HTTP响应的Response类 代表响应正文的Content接口及其实现类 运行HTTP服务器
第5章 创建非阻塞的HTTP服务器
HTTP协议(Hypertext Transfer Protocol,超级文本传输协议) 是网络应用层的协议,建立在TCP/IP协议基础上。HTTP协议使用 可靠的TCP连接,默认端口是80。HTTP的第一个版本是HTTP/0.9, 后来发展到了HTTP/1.0,现在最新的版本是HTTP/1.1。HTTP1.1 协议对应的RFC文档为RFC2068,网址为: RFC RFC2068 /rfc/rfc2068.txt。 /rfc/rfc2068.txt HTTP协议基于客户/服务器模式,客户端主动发出HTTP请求,服 务器接收HTTP请求,返回HTTP响应结果。HTTP协议对HTTP请 求以及响应的格式做了明确的规定。 本课程首先对HTTP协议做了简要的介绍,然后介绍了用Java创建 的一个简单的非阻塞的HTTP服务器。

Java网络编程精解chapter17-PPT文档资料

Java网络编程精解chapter17-PPT文档资料

采用HTTP作为通信协议,采用客户/服务模式。 RPC作为统一的远程方法调用途径。 传送的数据使用XML语言,允许服务提供者和客户经 过防火墙在Internet上进行通信。
17.1 SOAP简介
17.1 SOAP简介

SOAP客户和SOAP服务器之间采用符合SOAP规范的XML 数据进行通信。例如以下是一个SOAP服务器向SOAP客 户发回的响应数据1 SOAP简介


SOAP系统有两种工作模式,一种称为RPC (Remote Procedure Call),另一种叫法不统一, 在Microsoft的文档中称做Document-Oriented, 而在Apache的文档中,称为Message-Oriented。 下文将集中讨论RPC。 可以把SOAP RPC简单的理解为这样一个开放协 议:SOAP=RPC+HTTP+XML。它有以下特征:
package mypack; public class HelloService { public String sayHello(String username) { return "Hello:"+username; } }

编译这个Java类不需要在classpath中引入任何与AXIS相 关的JAR文件。编译完毕,应该把HelloService.class文件 拷贝到以下目录:
<?xml version="1.0" encoding="UTF-8" ?> <soapenv:Envelope xmlns:soapenv="/soap/envelope/" xmlns:xsd="/2019/XMLSchema" xmlns:xsi="/2019/XMLSchema-instance"> <soapenv:Body> <sayHelloResponse soapenv:encodingStyle="/soap/encoding/"> <sayHelloReturn xsi:type="xsd:string">Hello:weiqin</sayHelloReturn> </sayHelloResponse> </soapenv:Body> </soapenv:Envelope>

《网络编程技术教程》课件

《网络编程技术教程》课件

网络安全与隐私将成为未 来网络编程技术发展的重 要方向,保证网络通信的 安全性和数据隐私性。
通信过程
2
(Datagram)等特点。
通过服务器地址、端口号、数据信息的
形式进行通信。
3
应用场景
常用于音视频、实时游戏等对传输速度 有较高要求的应用。
HTTP协议
工作原理
基于客户端据。
特点
无状态、可扩展和应用广泛等特点。
应用场景
Web应用中广泛应用于浏览器请求与服务器响应的数据传输。
网上商城、支付平台、游戏交互 和社交通信等应用场景。
远程办公
办公软件、云盘及社交通信平台 等应用场景。
物联网
物联网数据流通及处理,例如传 感器通信、智能家居和智能城市 等应用场景。
Socket编程
基本概念
Socket通常被描述为"打电话"的方式进行进程间通信。
通信过程
客户端与服务器相互通信,完成服务的请求和应答的过程。
应用场景
广泛应用于TCP/IP协议中。
TCP/IP协议
协议特点
可靠传输、面向连接和基于字节 流等特点。
可靠与速度的权衡
TCP协议可靠性高,但牺牲了传 输速度;相反,UDP协议则优先 传输速度,牺牲了可靠性。
应用场景
在互联网和局域网中广泛应用于 各种网络通信。
UDP协议
1
基本特点
无连接、不可靠和基于数据报
WebSocket协议
工作原理
基于TCP协议,允许浏览器和服 务器进行全双工通信。
优点
更快的响应速度和更实时的数据 传输,适用于实时通信和多人协 作等场景。
应用场景
常用于网页端、手机端和桌面端 等实时通信场景。

第十六课:网络编程精选版演示课件.ppt

第十六课:网络编程精选版演示课件.ppt
DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port)
yyty
17
常用的几个方法如下:
byte[] getData() 用于得到发送过来的DatagramPacket中
的数据
void setData(byte[] buf) 用于将buf中的数据写入DatagramPacket
public ServerSocket (int port, int maxQueue, InetAddress bindAddr ) throws IOException
*
yyty
9
ServerSocket还定义了以下一些常用的方 法: public Socket accept() throws IOException public void bind(SocketAddress endpoint) throws IOException public void close() throws IOException
yyty
14
下面是客户端的部分代码:
try{ //创建套接字,该套接字连接IP地址为127.0.0.1的服务器,并向端口 号为8000的端口连接 Socket server = new Socket("127.0.0.1",8000);
if (server != null){ //通过套接字实现数据传输 //得到套接字的输入流 InputStream input = server.getInputStream(); //得到套接字的输出流 OutputStream out = server.getOutputStream();

《网络编程技术教程》课件

《网络编程技术教程》课件

Spring框架提供了多种模块,如 Spring MVC、Spring Security 等,方便开发者快速构建Web应 用程序和实现安全控制等功能。
04
网络编程实践
建立TCP服务器与客户端
总结词
掌握TCP协议,实现服务器与客户端的通信
详细描述
介绍TCP协议的基本原理,包括连接建立、数据传输和关闭连接的过程。通过编程实现一个简单的 TCP服务器和客户端,能够进行基本的通信。
非对称加密算法
使用不同的密钥进行加密和解密,常 见的算法有RSA、ECC等。
哈希算法
将数据转换成固定长度的哈希值,用 于验证数据的完整性和真实性。
数据压缩与解压缩
减少数据的大小,提高传输效率,常 见的算法有ZIP、RAR等。
负载均衡与性能优化
负载均衡器
将网络请求分发到多个服务器 上,平衡负载,提高系统处理
03
Java的网络编程框架有Spring MVC、Struts2等,可以帮助 开发者快速构建企业级Web应 用程序。
Node.js网络编程
01
Node.js是一个基于Chrome V8引擎的JavaScript运行环境 ,可以用来编写服务器端JavaScript应用程序。
02
Node.js具有非阻塞I/O模型、单线程等特点,适合构建高 并发、高性能的网络应用。
云计算平台上的网络编程需要考虑如何有效地利用云资源、如何实现高可 用性和可伸缩性、如何保证数据的安全性和隐私保护等问题。
云计算的发展推动了容器化和微服务架构的兴起,使得网络编程更加模块 化和可维护。
大数据处理与网络编程
大数据技术的广泛应用使得网络编程需要考虑如何处理大规模数据流、如何实现高效的数据 分析和处理、如何保证实时性等问题。

网络编程课件

网络编程课件

网络编程课件网络编程课件随着互联网的快速发展,网络编程成为了计算机科学领域中不可或缺的一部分。

网络编程涉及到在计算机网络上进行数据传输和通信的技术和方法。

在这篇文章中,我们将探讨网络编程的基本概念、常用协议以及一些实际应用。

一、网络编程的基本概念网络编程是指通过计算机网络进行数据传输和通信的过程。

它包括了客户端和服务器之间的交互,以及数据在网络中的传输和处理。

网络编程的基本概念包括套接字(Socket)、协议和端口等。

套接字是网络编程中最重要的概念之一。

它是一个抽象的概念,用于描述网络通信中的一种机制。

套接字可以理解为两台计算机之间的通信端点,通过套接字可以实现数据的发送和接收。

协议是网络编程中的另一个重要概念。

它定义了数据在网络中传输的规则和方式。

常见的网络协议包括TCP/IP协议、HTTP协议、FTP协议等。

不同的协议有不同的特点和用途,选择合适的协议可以提高网络通信的效率和安全性。

端口是网络编程中的一个标识符,用于标识不同的网络应用程序。

每个网络应用程序都会监听一个特定的端口,通过端口可以将数据传输到相应的应用程序中。

常用的端口号有80(HTTP)、21(FTP)、22(SSH)等。

二、常用的网络编程协议1. TCP/IP协议TCP/IP协议是互联网上最常用的协议之一。

它是一种面向连接的协议,保证了数据传输的可靠性和有序性。

TCP/IP协议提供了可靠的数据传输、错误检测和纠正、流量控制等功能,适用于大部分的网络应用。

2. HTTP协议HTTP协议是用于在Web浏览器和Web服务器之间传输数据的协议。

HTTP协议基于TCP/IP协议,是一种无状态的协议,每个请求和响应都是独立的。

HTTP协议定义了请求的格式、响应的格式以及一些状态码,通过HTTP协议可以实现Web页面的浏览和数据的传输。

3. FTP协议FTP协议是用于在客户端和服务器之间传输文件的协议。

FTP协议基于TCP/IP协议,提供了文件的上传、下载、删除和重命名等功能。

孙卫琴网络编程PPT2

孙卫琴网络编程PPT2

2.5.3 SO_TIMEOUT选项
设置该选项:public void setSoTimeout(int milliseconds) throws SocketException 读取该选项:public int getSoTimeOut() throws SocketException 当通过Socket的输入流读数据时,如果还没有 数据,就会等待。例Socket类的SO_TIMEOUT 选项用于设定接收数据的等待超时时间,单位 为毫秒,它的默认值为0,表示会无限等待, 永远不会超时。
2.4 半关闭Socket
有的时候,可能仅仅希望关闭输出流或 输入流之一。此时可以采用Socket类提 供的半关闭方法:
shutdownInput():关闭输入流。 shutdownOutput(): 关闭输出流。
2.4 半关闭Socket
先后调用Socket的shutdownInput()和 shutdownOutput()方法,仅仅关闭了输入流和 输出流,并不等价于调用Socket的close()方法。 在通信结束后,仍然要调用Socket的close()方 法,因为只有该方法才会释放Socket占用的资 源,比如占用的本地端口等。 Socket类还提供了两个状态测试方法,用来判 断输入流和输出流是否关闭:
2.1.4 客户连接服务器时可能抛出的异常
2.1.4 客户连接服务器时可能抛出的异常
抛出UnknownHostException的情况:如果无 法识别主机的名字或IP地址,就会抛出这种异 常。 抛出ConnectException的情况:
没有服务器进程监听指定的端口。 服务器进程拒绝连接。
抛出SocketTimeoutException的情况:如果客 户端等待连接超时,就会抛出这种异常。 抛出BindException的情况:如果无法把Socket 对象与指定的本地IP地址或端口绑定,就会抛 出这种异常。ຫໍສະໝຸດ 2.1.2 设定服务器的地址

孙卫琴网络编程PPT3

孙卫琴网络编程PPT3


参见ThreadPool类
3.6.3 使用JDK类库提供的线程池
执行serverSocket.setReceiveBufferSize()方法,相当于对所有由 serverSocket.accept()方法返回的Socket设置接收数据的缓冲区的 大小。


3.5.4 设定连接时间、延迟和 带宽的相对重要性

public void setPerformancePreferences(int connectionTime,int latency,int bandwidth) 该方法的作用与Socket的 setPerformancePreferences()方法的作用相同, 用于设定连接时间、延迟和带宽的相对重要性。
3.1.1 绑定端口
ServerSocket serverSocket=new ServerSocket(80);

如果运行时无法绑定到80端口,以上代码会抛出IOException,更 确切的说,是抛出BindException,它是IOException的子类。 BindException一般是由以下原因造成的: 端口已经被其他服务器进程占用。 在某些操作系统中,如果没有以超级用户的身份来运行服务 器程序,那么操作系统不允许服务器绑定到1~1023之间的端 口。
3.3 关闭ServerSocket

以下程序代码创建了一个ServerSocket对象后, 就马上关闭它,以便及时释放它占用的端口, 从而避免程序临时占用系统的大多数端口。
for(int port=1;port<=65535;port++){ try{ ServerSocket serverSocket=new ServerSocket(port); serverSocket.close(); //及时关闭ServerSocket }catch(IOException e){ System.out.println("端口"+port+" 已经被其他服务器进程占用"); } }

孙卫琴《Java面向对象编程》配套上PPT

孙卫琴《Java面向对象编程》配套上PPT


描述Java编程语言的主要特性 描述Java虚拟机的主要功能 描述垃圾收集是如何进行的 列举Java虚拟机在运行时所执行的三大任务 定义Class,Package和Application 编写、编译并运行简单Java应用程序 了解JavaDoc文档的作用 了解java. lang包
参照《Java面向对象编程》的第二章(第一个Java应用)
练习3:编译并运行如下代码
编译并运行A.java,B.java
package a
package bA.class源自B.class B.class
/** A.java */ package a; public class A{ public A(){ System.out.println("new Instance of A"); } }
练习1:编译并运行如下代码
public class HelloWorldApp{ public static void main (String args[]) { System.out.println ("Hello World!"); } }
HelloWorldApp.java
javac HelloWorldApp.java HelloWorldApp.class
注释
有三种插入注释的风格:
//comment on one line /* comment on one or more line */ /** documenting comment */
javadoc注释

以“/**”开始,以“*/”结束。 javadoc命令只处理源文件中在类、接口定义、方法、变量、构造器之前的注释. 例:运行javadoc MyHelloworld.java

《网络编程技术》课件

《网络编程技术》课件

Web编程
构建基于HTTP协议的Web应 用程序,如网站开发。
网络编程框架
Sp ring Fram ework
为Java应用提供了完整且灵活的 网络编程框架,方便开发人员构 建企业级应用。
N ode.js
基于JavaScrip t的网络编程框架, 可构建高性能和可扩展的网络应 用。
D jango
用Python编写的高级网络编程框 架,强调代码简洁和开发效率。
《网络编程技术》PPT课 件
本课件旨在介绍网络编程技术,探讨其作用、类别和框架,讲解网络通信基 础知识、协议以及通信模型,解析Socket编程原理,论述异常处理、多线程、 安全和加密解密等相关话题,并展望网络编程的未来发展。
什么是网络编程技术
网络编程技术是一种用于构建网络应用程序的技术,通过使用各种编程语言 和工具,实现在计算机网络上进行数据通信和信息交换的能力。
网络通信基础知识
了解计算机网络结构、协议和通信模型是理解网络编程技术的基础。掌握IP地址、端口、数据包、套接字等概 念将有助于构建可靠的网络应用程序。
网络协议
网络协议定义了计算机网络中数据的格式和传输规则,如TCP/IP协议族、HTTP协议、FTP协议、SMTP协议等。 了解常用网络协议可帮助我们更好地设计和开发网络应用。
网络传输控制协议
TCP是一种可靠的面向连接的协议,负责将数据分割成报文段并按照顺序传输。 它提供全双工通信和数据校验,适用于可靠数据传输场景。
用户数据报协议
UD P是一种无连接的协议,主要用于实时性较高的应用。它通过封装数据包并将其发送到目标地址,不保证数 据的可靠性,但传输效率较高,适用于实时音视频和游戏等场景。
客户端Socket编程原理

第11课 小应用程序 孙卫琴《Java面向对象编程》配套PPT

第11课 小应用程序  孙卫琴《Java面向对象编程》配套PPT
JApplet作为一种插件时,它的插件运行程序为JRE程 序(Java Runtime Enviroment,Java运行时环境)。 该程序的下载网址为: /j2se/1.5.0/download.jsp 。 JRE程序的名字为 jre-1_5_0_06-windows-i586-p.exe。
Thread.sleep(1000); }catch(Exception e){} if(fontSize>40) fontSize=8; } }//run()
}
在HTML中加入JApplet
IE浏览器无法运行Java2中的JApplet,在这种情况下, 可以把JApplet作为一种插件来运行。在IE浏览器中, 插件的标记为<object>,在Netscape浏览器中,插件 的标记为<embed >。当浏览器遇到插件标记,就会启 动相应的插件运行程序,通过该程序来运行特定的插 件。
g.setFont(new Font("newFont",Font.BOLD,fontSize)); g.drawString(word,30,80); } public void run(){ while(true){ fontSize+=4; repaint(); //The word will be redrawed with new fontSize try{
行Applet。
HTML中的Applet标记
以IE浏览器为例,IE浏览器支持JDK1.0版本中的Applet, 只要在网页中加入一个 <applet>标记就能嵌入一个 Applet.
浏览器一遇到这个标记,就会下载相应的 Applet类文 件,并启动Java虚拟机运行这个Applet。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
bind(String name,Object obj):注册对象,把对象与一个名字绑定。 如果该名字已经与其它对象绑定,就会抛出 NameAlreadyBoundException。 rebind(String name,Object obj):注册对象,把对象与一个名字绑定。 如果该名字已经与其它对象绑定,不会抛出 NameAlreadyBoundException,而是把当前参数obj指定的对象覆盖 原先的对象。 lookup(String name):查找对象,返回与参数name指定的名字所绑 定的对象。 unbind(String name):注销对象,取消对象与名字的绑定。
参考《Java网络编程精解》的第2章
第11章 RMI框架
如图11-1所示,在实际应用中,为了合理的分配软硬 件资源,会把各个对象分布在不同的网络节点上,这 些对象之间能相互发送消息。
第11章 RMI框架
分布式对象模型的实现系统应该具备以下功能:
(1)把分布在不同节点上的对象之间发送的消息转换为字节序列, 这一过程称为编组(marshalling)。 (2)通过套接字建立连接并且发送编组后的消息,即字节序列。 (3)处理网络连接或传输消息时出现的各种故障。 (4)为分布在不同节点上的对象提供分布式垃圾收集机制。 (5)为远程方法调用提供安全检查机制。 (6)服务器端运用多线程或非阻塞通信机制,确保远程对象具有很 好的并发性能,能同时被多个客户访问。 (7)创建与特定问题领域相关的各种本地对象和远程对象。
存根采用一种与平台无关的编码方式,把方法的参数 编码为字节序列,这个编码过程称为参数编组。 RMI主要采用Java序列化机制进行参数编组。接着,存 根把以下请求信息发送给服务器: 被访问的远程对象的名字。 被调用的方法的描述。 编组后的参数的字节序列。
11.1 RMI的基本原理
服务器端接收到客户端的请求信息,然后由相 应的骨架对象来处理这一请求信息,骨架对象 执行以下操作:
以下例程11-1是HelloService接口的源程序。在 这个接口中声明了echo()和getTime()两个方法, 它们都声明抛出RemoteException。
例程11-1 HelloService.java 11-1 package hello; import java.util.Date; import java.rmi.*; public interface HelloService extends Remote{ public String echo(String msg) throws RemoteException; public Date getTime() throws RemoteException; }
11.2.3 创建服务器程序
在客户程序中,通过以下方式获得远程对象的 存根:
Context namingContext=new InitialContext(); HelloService service1= (HelloService)namingContext.lookup("rmi://localhost/HelloService1");
11.2.1 创建远程接口
远程接口中声明了可以被客户程序访问 的远程方法。RMI规范要求远程对象所属 的类实现一个远程接口,并且远程接口 符合以下条件:
直接或间接继承java.rmi.Remote接口。 接口中的所有方法声明抛出 java.rmi.RemoteException。
11.2.1 创建远程接口
11.2.3 创建服务器程序
以下程序代码注册了一个HelloServiceImpl对象, 并且给它命名为“rmi:HelloService1”:
HelloService service1 = new HelloServiceImpl("service1"); //创建远程对象 Context namingContext=new InitialContext(); namingContext.rebind( "rmi:HelloService1", service1 ); //注册远程对象
11.1 RMI的基本原理
如图11-4所示,RMI框架采用代理来负责客户与远程对象之间通 过Socket进行通信的细节。 RMI框架为远程对象分别生成了客户端代理和服务器端代理。位 于客户端的代理类称为存根(Stub),位于服务器端的代理类称 为骨架(Skeleton)。
11.1 RMI的基本原理
11.2.2 创建远程类
(2)导出为远程对象的第二种方式:如果一个远程类已经继 承了其他类,无法再继承UnicastRemoteObject类,那么可以 在构造方法中调用UnicastRemoteObject类的静态 exportObject()方法,同样,远程类的构造方法也必须声明抛 出RemoteException。
11.2.2 创建远程类
远程类就是远程对象所属的类。RMI规范要求 远程类必须实现一个远程接口。 此外,为了使远程类的实例变成能为远程客户 提供服务的远程对象,可通过以下两种途径之 一把它导出(export)为远程对象。
(1)使远程类继承 java.rmi.server.UnicastRemoteObject类,并且远程 类的构造方法必须声明抛出RemoteException。这 是最常用的方式,本章多数例子都采取这种方式。
Java网络编程精解
作者:孙卫琴 作者: 参考书籍:<<Java网络编程精解>> 网络编程精解>> 参考书籍:<<Java网络编程精解 技术支持网址: 技术支持网址:
第11章 RMI框架
11.1 RMI的基本原理 11.2 创建第一个RMI应用 11.3 远程对象工厂设计模式 11.4 远程方法中的参数与返回值传递 11.5 回调客户端的远程对象 11.6 远程对象的并发访问 11.7 分布式垃圾收集 11.8 远程对象的equals()、hashCode()和clone()方法 11.9 使用安全管理器 11.10 RMI应用的部署以及类的动态加载 11.11 远程激活
反编组参数,即把参数的字节序列反编码为参数。 定位要访问的远程对象。 调用远程对象的相应方法。 获取方法调用产生的返回值或者异常,然后对它进 行编组。 把编组后的返回值或者异常发送给客户。
11.2 创建第一个RMI应用
大致说来,创建一个RMI应用包括以下步 骤:
(1)创建远程接口:继承java.rmi.Remote 接口。 (2)创建远程类:实现远程接口。 (3)创建服务器程序:负责在rmiregistry 注册表中注册远程对象。 (4)创建客户程序:负责定位远程对象, 并且调用远程对象的方法。
11.2.3 创建服务器程序
RMI采用一种命名服务机制来使得客户程 序可以找到服务器上的一个远程对象。 在JDK的安装目录的bin子目录下有一个 rmiregistry.exe程序,它是提供命名服务 的注册表程大任务就是向rmiregistry注册表注册远程对象。 从JDK1.3以上版本开始,RMI的命名服务API被整合到JNDI(Java Naming and Directory Interface,Java名字与目录接口)中。 在JNDI中,javax.naming.Context接口声明了注册、查找,以及 注销对象的方法:
第11章 RMI框架
如图11-2所示,RMI框架封装了所有底层通信细节,并且解决了编组、 分布式垃圾收集、安全检查和并发性等通用问题。有了现成的框架,开 发人员就只需专注于开发与特定问题领域相关的各种本地对象和远程对 象。
11.1 RMI的基本原理
RMI采用客户/服务器通信方式。在服务器上部署了提供各种服务 的远程对象,客户端请求访问服务器上远程对象的方法。 如图11-3所示,HelloServiceImpl是一个远程对象,它运行在服务 器上,客户端请求调用HelloServiceImpl对象的echo()方法。
11.2 创建第一个RMI应用
图11-5是本节要创建的RMI应用的类框图。其中HelloService是一 个远程接口,它继承了java.rmi.Remote接口,HelloServiceImpl 类实现了该接口,并且继承了 java.rmi.server.UnicastRemoteObject类。 SimpleClient和SimpleServer类分别是客户程序和服务器程序。
11.2.3 创建服务器程序
在例程11-3的SimpleServer类的main()方法中,创建了 两个HelloServiceImpl对象,然后把它们注册到 rmiregistry注册表中,它们的注册名字分别为 “HelloService1”和“HelloService2”。
public static void main( String args[] ){ try{ HelloService service1 = new HelloServiceImpl("service1"); HelloService service2 = new HelloServiceImpl("service2"); Context namingContext=new InitialContext(); namingContext.rebind( "rmi:HelloService1", service1 ); namingContext.rebind( "rmi:HelloService2", service2 ); System.out.println( "服务器注册了两个HelloService对象" ); }catch(Exception e){ e.printStackTrace(); } }
11.2.2 创建远程类
以下HelloServiceImpl类已经继承了OtherClass类,在其构造方法中 调用UnicastRemoteObject.exportObject(this,0)方法,将自身导出为 远程对象。
相关文档
最新文档