1. 开发RMI服务器

Net Beans创建java project: (qs) (Server.java)

package server;

import java.rmi.*;

//远程接口必须集成java.rmi.Remote接口
public interface Server extends Remote
{
//所有在Remote接口里声明的方法都应该抛出RemoteException异常
String helloWorld(String name) throws RemoteException;
Person getPerson(String name , int age) throws RemoteException;
}

Person.java

package server;

import java.io.*;

public class Person implements Serializable {

    private String name;
private int age; //无参数的构造器
public Person() {
} //初始化全部属性的构造器
public Person(String name, int age) {
this.name = name;
this.age = age;
} //name属性的setter和getter方法
public void setName(String name) {
this.name = name;
} public String getName() {
return this.name;
} //age属性的setter和getter方法
public void setAge(int age) {
this.age = age;
} public int getAge() {
return this.age;
}
}

ServerImpl.java

package server;

import java.rmi.*;
import java.rmi.server.*;
import java.rmi.registry.*;
import javax.naming.*; //远程服务类,远程服务类必须继承UnicastRemoteObject,并实现Remote接口
public class ServerImpl extends UnicastRemoteObject implements Server
{
//由于默认构造器必须声明抛出RemoteException
//因此此处必须显式定义该构造器
public ServerImpl() throws RemoteException
{
}
//实现Remote接口必须实现的方法
public String helloWorld(String name) throws RemoteException
{
return name + ", 您好!";
}
//实现Remote接口必须实现的方法
public Person getPerson(String name , int age) throws RemoteException
{
return new Person(name , age);
}
//下面是服务类的本地方法,不会“暴露”为远程服务。
public void info()
{
System.out.println("我是本地方法");
}
//下面提供程序入口,将远程类实例绑定为本机的服务。
public static void main(String[] args) throws Exception
{
//创建远程服务类实例
Server imp = new ServerImpl();
//注册远程服务的端口
LocateRegistry.createRegistry(1099);
//将远程服务实例绑定为远程服务。
Naming.rebind("rmi://:1099/crazyit", imp);
}
}

2. 开发RMI客户端

需要RMI服务端的Server.clsss和Person.class

RMIClient.java

package client;

import javax.naming.*;
import java.rmi.*;
import server.Server; public class RMIClient
{
public static void main(String[] args)throws Exception
{
//通过JNDI查找远程服务,并执行强制类型转换
Server ser = (Server)Naming.lookup("rmi://127.0.0.1:1099/crazyit");
System.out.println(ser instanceof java.rmi.server.RemoteStub);
//调用远程方法
System.out.println(ser.helloWorld("yeeku"));
//调用远程方法。
System.out.println(ser.getPerson("yeeku",28));
}
}

JavaEE(3) - RMI服务器和客户端的更多相关文章

  1. 使用Spring构建RMI服务器和客户端

    上一篇文章我们实用JDK原生API构造了简单RMI应用,本篇将实用Spring框架来构造RMI的应用,实用Spring你会体验到简单,不需要那么多的条条框框,因为Spring给你做了很多封装. 项目构 ...

  2. [转帖]JavaEE中Web服务器、Web容器、Application服务器区别及联系

    JavaEE中Web服务器.Web容器.Application服务器区别及联系 https://www.cnblogs.com/vipyoumay/p/5853694.html 在JavaEE 开发W ...

  3. SVN服务器和客户端安装教程

    SVN是什么?有何用? SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS.CVS,它采用了分支管理系统,它的设计目标就是取代CVS.互联网上很多版本控制服务已从CVS迁 ...

  4. 2016windows(10) wamp 最简单30分钟thrift入门使用讲解,实现php作为服务器和客户端的hello world

    2016最简单windows(10) wamp 30分钟thrift入门使用讲解,实现php作为服务器和客户端的hello world thrift是什么 最简单解释 thrift是用来帮助各个编程语 ...

  5. python web编程-CGI帮助web服务器处理客户端编程

    这几篇博客均来自python核心编程 如果你有任何疑问,欢迎联系我或者仔细查看这本书的地20章 另外推荐下这本书,希望对学习python的同学有所帮助 概念预热 eb客户端通过url请求web服务器里 ...

  6. GATT两个角色 服务器与客户端

    两个设备应用数据的通信是通过协议栈的GATT层实现的. 从GATT角度来看,当两个设备建立连接后,他们处于以下两种角色之一: GATT服务器: 它是为GATT客户端提供数据服务的设备 GATT客户端: ...

  7. golang thrift 源码分析,服务器和客户端究竟是如何工作的

    首先编写thrift文件(rpcserver.thrift),运行thrift --gen go rpcserver.thrift,生成代码 namespace go rpc service RpcS ...

  8. GATT 服务器与客户端角色

    两个设备应用数据的通信是通过协议栈的GATT层实现的.从GATT角度来看,当两个设备建立连接后,他们处于以下两种角色之一: GATT服务器: 它是为GATT客户端提供数据服务的设备 GATT客户端:  ...

  9. homework-05 服务器与客户端

    首先非常抱歉第三次和第四次作业我没交上来,不想找借口强调原因,但是这两次作业我一定会补上,到时候会@助教.谢谢 回到这次作业! 这次作业邹老师没说博客的格式,所以在这里就没有什么回答问题的东西了.这次 ...

随机推荐

  1. 【原创】编写多线程Python爬虫来过滤八戒网上的发布任务

    目标: 以特定语言技术为关键字,爬取八戒网中网站设计开发栏目下发布的任务相关信息 需求: 用户通过设置自己感兴趣的关键字或正则表达式,来过滤信息. 我自己选择的是通过特定语言技术作为关键字,php.j ...

  2. char *详细指针

    我前段时间写的char*和char[]差额.今char*做一个更深入的了解 1:char像指针和其他指针,也定义一个地址,例如int*它定义了一个堆栈,4字节,char*之,现在写一段代码 #incl ...

  3. leetcode——Evaluate Reverse Polish Notation 求算式值(AC)

    Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...

  4. 隐藏快捷方式扩展名(.lnk)

    自从装了Windows 7操作系统以后,有一个问题一直困扰着我.当我去掉“目录选项中”的“隐藏已知文件类型的扩展名”选项的“√”之后,桌面上的快捷方式的扩展名也出来了,看上去非常不爽.记得在XP.Vi ...

  5. PHP安装mcrypt.so报错 mcrypt.h not found 的解决的方法

    报错内容:configure: error: mcrypt.h not found. Please reinstall libmcrypt 网上搜索了非常多,包含自带的 yum install lib ...

  6. 在线API大全

    之前整理过几个经常使用api地址,在经常使用在线API集合博文中. 近期浏览网页的时候,又发现一个很完整的api的大全,分享出来,建议大家收藏起来,用的时候方便查询. 经常使用API文档索引http: ...

  7. 并发编程实践三:Condition

    Condition实例始终被绑定到一个锁(Lock)上.Lock替代了Java的synchronized方法,而Condition则替代了Object的监视器方法,包含wait.notify和noti ...

  8. 读书时间《JavaScript高级程序设计》四:BOM,客户端检测

    隔了一段时间,现在开始看第8章. 第8章:BOM BOM提供了很多对象,用于访问浏览器的功能.BOM的核心对象是window,它表示浏览器的一个实例. window对象是通过javascript访问浏 ...

  9. 打印出所有"水仙花数

    时间限制: 1 Sec  内存限制: 128 MB 提交: 695  解决: 352 [提交][状态][讨论版] 题目描述 打印出所有"水仙花数",所谓"水仙花数&quo ...

  10. Oracle中REGEXP_SUBSTR及其它支持正则表达式的内置函数小结

    Oracle中REGEXP_SUBSTR函数的使用说明: 题目如下:在oracle中,使用一条语句实现将'17,20,23'拆分成'17','20','23'的集合. REGEXP_SUBSTR函数格 ...