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. Windows下一个AndroidStudio 正在使用Git(AndroidStudio工程GitHub关联)

    前提条件 : 1. 设备 Git client 下载链接 2. 有着 GitHub 账号 (假设你已经有了一些git基础, 假设还一点都不会, 请去找其它加成学习) AndroidStudio项目公布 ...

  2. Codeforces Round #257 (Div. 2) D题:Jzzhu and Cities 删特殊边的最短路

    D. Jzzhu and Cities time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  3. redis预切片技术,实现

    平时,我们将创建多个redis实例,以缓解单redis压力范例.但,作为高速缓存的数量增加.对redis对于扩展是一种非 - 不要无所谓.对redis有几种方法用于扩张可能.让我们添加每个redis最 ...

  4. 对于COM对象使用ComPtr代替传统指针

    对于COM对象来说使用传统指针比较麻烦,还要记得Release()防止内存泄漏,一不小心就会出现各种各样的问题.针对这种问题微软提供了对于COM对象的智能指针ComPtr,这里是官方文档https:/ ...

  5. Xampp mysql无法启动的解决方案(转)

    如果出现mysql 无法启动表明在安装xampp 前已经安装了mysql,造成mysql服务无法启动. [mysql] MySQL Service detected with wrong path23 ...

  6. PHPSingleton模式的例子

    在这篇文章中PHPSingleton模式的解释不一定好!仅举它的一个例子.其目的是为了让自己通过一个例子来加深对Singleton模式的理解!这里,以供参考! 单例:能够简单的理解是通过一个类,仅仅能 ...

  7. 取缔Chrome装载电脑管家的广告过滤脚本代码

    今天Chrome调试脚本.加载在下面的脚本中找到的内容: /* 电脑管家chrome 广告过滤 */ var GJAD_CS = { elemhideElt : null, setElemhideCS ...

  8. Libgdx Box2D现实------这缓释微丸(一个:项目介绍)

    它花了两个星期的假写物理游戏,在几次课逃逸,是大学,因为大部分时间点!今天,我基本上一直每节课的点1-3有时它,哎,这似乎是不再逃跑.不知道值没有值得,仅仅是简单地想做自己喜欢的事情,而不是跟老师大眼 ...

  9. C# 经典排序算法大全

    C# 经典排序算法大全 选择排序 using System; using System.Collections.Generic; using System.Linq; using System.Tex ...

  10. css3 shadow为了实现各种漂亮的阴影效果

    <!DOCTYPE html> <head> <meta http-equiv="Content-Type" content="text/h ...