网站建设资讯

NEWS

网站建设资讯

javarmi实现代码 java开发代码

谁能帮我读一下这三个JAVA小程序,关于RMI技术的,最好能在后面帮我标注解释。谢谢了

RMI主要可以理解为远程调用。第三个是真正执行计算的实体,第二个是第三个对外公开的总代理商,第一个就是零售商。

成都创新互联主营江源网站建设的网络公司,主营网站建设方案,重庆APP开发公司,江源h5微信小程序开发搭建,江源网站营销推广欢迎江源等地区企业咨询

java rmi怎样实现服务器间的通信

首先要选用技术,这很明显做个socket就行,简单通讯,还可以扩展为非局域网的主机。

1,编写socket服务器端 放在主服务器上,利用开机启动的方式启动server

并保持监听某端口

2,编写socket客户端放在 你需要的从属服务器上,同样利用开机启动的方式

运行client,然后程序中利用 经过包装client.getOutputStream()的流,向服务器发送消息,就是那个ip (当字符串发,转换为byte[])

(细节我就不介绍了…… )

3,汇总的实质就是 server 利用

client.getInputStream()的包装流(假如叫in)

存放数据的数组,假如叫 bytep[] buf;

获得数据 in.read(buf,0,buf.length);

然后:

File file = new File("D://log.txt");//假如是你要的log文件

FileInputStream fis =new FileInputStream(file);

fis.write(buf);

这样就搞定了

细节注意点:由于log文件需要保留旧数据,所以写文件的时候要注意选用Acess流进行插入。另外,当从属服务器关闭的时候,也要发个信息过来,把对应的ip删除掉哦!

给我分呗

Java Rmi如何实现两个客户端之间的通信 求说的具体点

RMI的开发步骤

先创建远程接口及声明远程方法,注意这是实现双方通讯的接口,需要继承Remote

开发一个类来实现远程接口及远程方法,值得注意的是实现类需要继承UnicastRemoteObject

通过javac命令编译文件,通过java -server 命令注册服务,启动远程对象

最后客户端查找远程对象,并调用远程方法

首先为服务建立一个Model层,注意因为此对象需要现实进行远程传输,所以必须继承Serializable

代码 

package rmi.model;

import java.io.Serializable;

//注意对象必须继承Serializable

publicclass PersonEntity implements Serializable {

privateint id;

private String name;

privateint age;

publicvoid setId(int id) {

this.id = id;

}

publicint getId() {

return id;

}

publicvoid setName(String name) {

this.name = name;

}

public String getName() {

return name;

}

publicvoid setAge(int age) {

this.age = age;

}

publicint getAge() {

return age;

}

}

创建远程接口PersonService,注意远程接口需要继承Remote

代码

package rmi.service;

import java.rmi.Remote;

import java.rmi.RemoteException;

import java.util.List;

import rmi.model.*;

//此为远程对象调用的接口,必须继承Remote类

publicinterface PersonService extends Remote {

public ListPersonEntity GetList() throws RemoteException;

}

建立PersonServiceImpl实现远程接口,注意此为远程对象实现类,需要继承UnicastRemoteObject

代码

package rmi.serviceImpl;

import java.rmi.RemoteException;

import java.rmi.server.UnicastRemoteObject;

import java.util.LinkedList;

import java.util.List;

import rmi.model.PersonEntity;

import rmi.service.*;

//此为远程对象的实现类,须继承UnicastRemoteObject

publicclass PersonServiceImpl extends UnicastRemoteObject implements PersonService {

public PersonServiceImpl() throws RemoteException {

super();

// TODO Auto-generated constructor stub

}

@Override

public ListPersonEntity GetList() throws RemoteException {

// TODO Auto-generated method stub

System.out.println("Get Person Start!");

ListPersonEntity personList=new LinkedListPersonEntity();

PersonEntity person1=new PersonEntity();

person1.setAge(25);

person1.setId(0);

person1.setName("Leslie");

personList.add(person1);

PersonEntity person2=new PersonEntity();

person2.setAge(25);

person2.setId(1);

person2.setName("Rose");

personList.add(person2);

return personList;

}    

}

建立服务器端,在服务器端注册RMI通讯端口与通讯路径,然后通讯javac命令编译文件,通过java -server 命令注册服务。以下面代码为例,如果阁下将项目建立于D:\\RMI\RemotingService文件夹上时,则先输入D:\\RMI\RemotingService\srcjavac rmi/remotingservice/Program.java获取Program.class(如何阁下使用的MyEclipse等开发工具,可跳过此步,直接在*/bin文件夹中直接调用已经生成的Program.class),然后输入D:\\RMI\RemotingService\srcjava rmi/remotingservice/Program启动服务。

代码

package rmi.remotingservice;

import java.rmi.Naming;

import java.rmi.registry.LocateRegistry;

import rmi.service.*;

import rmi.serviceImpl.*;

publicclass Program{

publicstaticvoid main(String[] args) {

try {

PersonService personService=new PersonServiceImpl();

//注册通讯端口

LocateRegistry.createRegistry(6600);

//注册通讯路径

Naming.rebind("rmi://127.0.0.1:6600/PersonService", personService);

System.out.println("Service Start!");

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

最后建立客户端进行测试,注意客户调用的RMI路径必须服务器配置一致

代码 

package rmi.remotingclient;

import java.rmi.Naming;

import java.util.List;

import rmi.model.PersonEntity;

import rmi.service.*;

publicclass Program {

publicstaticvoid main(String[] args){

try{

//调用远程对象,注意RMI路径与接口必须与服务器配置一致

PersonService personService=(PersonService)Naming.lookup("rmi://127.0.0.1:6600/PersonService");

ListPersonEntity personList=personService.GetList();

for(PersonEntity person:personList){

System.out.println("ID:"+person.getId()+" Age:"+person.getAge()+" Name:"+person.getName());

}

}catch(Exception ex){

ex.printStackTrace();

}

}

}

常见错误

在命令提示符调用java命令时,显示并无此命令。这是因为未在“环境变量”中绑定JAVA的JDK命令造成的,你首先单击“计算机右键”-“属性”-“高级”-“环境变量”。在系统变量Path设置中加载为JDK的路径  .;D:\Program Files\Genuitec\Common\binary\com.sun.java.jdk.win32.x86_1.6.0.013\bin。然后在ClassPath加载服务器端的Program.class地址 .;D:\\RMI\RemotingService\bin

在调用javac命令时出现“javac 找不到文件 ..... ”此错误,可能是因为阁下输入的文件路径出现错误造成,注意不要把D:\\RMI\RemotingService\srcjavac rmi/remotingservice/Program.java写错为D:\\RMI\RemotingService\srcjavac rmi.remotingservice.Program.java

在调用D:\\RMI\RemotingService\binjava rmi/remotingservice/Program命令时出现“Exception in thread 'main' java.lang.NoClassEdfoundError”错误,第一这可能是阁下把Program错写为Program.class,注意java命令不需要加后缀名。第二可能是阁下把“java rmi/remotingservice/Program”错写为“java rmi\remotingservice\Program"。


当前文章:javarmi实现代码 java开发代码
标题路径:http://cdweb.net/article/doddpie.html