by agate - Published: 2008-10-08 [7:45 下午] - Category: 程序编码

今天帮朋友做课程设计, 要用 RMI 远端操控数据库. 于是乎便看了一下 RMI 应用的用法规则. 发现十分简单. 在这里写下一个 HelloWorld 例子, 以便未来参考.

引言: 白痴的我明明知道 RMI 底层是 Socket 实现的, 传递的对象固然要序列化. 但是今天我竟然傻逼地把 Connection 传导客户端操作... 小朋友不要学我变成白痴哦!

一. 结构(我叫他规则):
一个接口, 一个实现类. 一个服务器端, 一个客户端. 总共三类一接口.

二. 代码:

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface Product extends Remote {
    public String getName() throws RemoteException;
}
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

public class ProductImpl extends UnicastRemoteObject implements Product {

    private String name;

    public ProductImpl(String name) throws RemoteException {
        this.name = name;
    }

    public String getName() throws RemoteException {
        System.out.println("方法 getName 被调用!");
        return name;
    }

}
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

public class Server {

    public static void main(String[] args) {
        try {
            Registry r = LocateRegistry.createRegistry(1099);
            Product p = new ProductImpl("乐事薯片"); //我的最爱
            r.bind("p", p);
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

public class Client {
public static void main(String[] args) {
        try {
            String host = ""; //这里替换成你的服务器地址, 空的就代表本机
            Registry r = LocateRegistry.getRegistry(host);
            Product p = (Product)r.lookup("p");
            System.out.println("此产品的名字为:" + p.getName());
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}

三. 执行:
1. 放置
将上述 4 个类放置在统一文件夹下.
2. 编译
javac -cp . *.java
3. 启动服务器端
启动一个终端, 进入该文件夹, 执行:
java -cp . Server
4. 启动客户端
启动一个终端, 进入该文件夹, 执行:
java -cp . Client

四. 注意
编码问题一直存在, java 编译也不例外! 在 Linux 这些 UTF-8 的世界里请大家把上面四个文件都保存成 UTF-8 格式. Windows 的世界里, 保存成 ANSI 即可!

Tags: [ , , ] - Comments: View Comments
blog comments powered by Disqus