分布式开发小案例

大概流程就是服务器端启动服务,给外界提供数据访问的接口,然后指明自己的ip地址和端口号。接着客户端拿过这个接口,根据服务端的连接条件操作。最后建立连接拿到数据。
1.服务器这边建个简单的java project - RMIService项目
2.客户端这边建个简单的java project - RMIClient项目
基本框架:
在这里插入图片描述代码实现:
1.服务器端MyServier 接口类->`package zhong.service;

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

/*

  • 服务接口必须要继承UnicasteRemoteObject类
    */
    public interface MyServier extends Remote {
    public String sayHello(String name) throws RemoteException;
    public int calc(int a ,int b ) throws RemoteException;
    }`
    2.服务器端MyServierImpl 实现类->
package zhong.service.impl;

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

import zhong.service.MyServier;

/*
 * 服务接口必须要继承UnicasteRemoteObject类
 */
public class MyServiceImpl extends UnicastRemoteObject implements MyServier {

	public MyServiceImpl() throws RemoteException {
		super();
		// TODO Auto-generated constructor stub
	}

	@Override
	public String sayHello(String name) throws RemoteException {
		String result = name+"你好!欢迎调用服务方法...";
		return result;
	}
	@Override
	public int calc(int a, int b) throws RemoteException {
		int result = (a+b)*10;
		return result;
	}
}

3.服务器端发布类->

import java.rmi.Naming;
import java.rmi.registry.LocateRegistry;

import zhong.service.MyServier;
import zhong.service.impl.MyServiceImpl;
/**
 * 我的服务器
 * @author Administrator
 *
 */
public class MyService {

	public static void main(String[] args) {
		// 把服务注册到网络上
		try {
			//服务对象的创建
			MyServier servier = new MyServiceImpl();
			System.out.println("服务器启动。。。");
			//发布服务
			LocateRegistry.createRegistry(43210);
			//rmi:协议         172.17.1.56:主机地址      7000:端口      service:是服务名称,--指定访问的服务
			Naming.bind("rmi://172.17.1.56:43210/service", servier);
		} catch (Exception e) {
			e.getStackTrace();
		}
		

	}

}

启动服务器后通过电脑cmd进去命令窗口执行netstat命令,可以看到自己的服务
在这里插入图片描述
4.客户端接收服务器MyServier 接口类->

package zhong.service;

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

/*
 *  服务接口必须要继承UnicasteRemoteObject类
 *  客户端类要拿到这个接口,然后根据接口获取操作获取服务器放的数据
 */
public interface MyServier extends Remote {
	public String sayHello(String name) throws RemoteException;
	public int calc(int a ,int b ) throws RemoteException;
}

5.客户端连接类MyClient ->

package com.icss.main;

import java.rmi.Naming;

import zhong.service.MyServier;

public class MyClient {
	public static void main(String[] args) {
		try {
			//根据服务端的ip和端口及服务的名称获取连接对象,然后调用里面的方法操作就ok
			MyServier servier =(MyServier) Naming.lookup("rmi://172.17.1.56:43210/service");
			String str=servier.sayHello("zhong5");
			System.out.println(str);
			int num=servier.calc(120, 13);
			System.out.println("num="+num);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
			
		
	}
}

大致效果:
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值