问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

通过RMI 获取精确时间

发布网友 发布时间:2022-04-24 19:56

我来回答

2个回答

热心网友 时间:2023-10-09 05:46

直接上代码 比着写一遍就懂了

接口:

import java.rmi.Remote;

import java.rmi.RemoteException;

import java.util.Date;

public interface Clock extends Remote {

public Date getTime() throws RemoteException ;

}


实现:

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

import Clock;

public class ClockImpl extends UnicastRemoteObject implements Clock {

public ClockImpl() throws RemoteException {
super();
}

public Date getTime() throws RemoteException {
return new Date();
}

}


服务器:

import java.net.MalformedURLException;
import java.rmi.AlreadyBoundException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;

import Clock;
import ClockImpl;

public class Server {

public static void main(String[] args) {
try {
Clock c = new ClockImpl();
LocateRegistry.createRegistry(6543);
Naming.bind("rmi://localhost:6543/timeService", c);
} catch (RemoteException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (AlreadyBoundException e) {
e.printStackTrace();
}

}

}


客户端:

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;

import Clock;

public class Client {

public static void main(String[] args) {
try {
Clock c = (Clock) Naming.lookup("rmi://localhost:6543/timeService");
System.out.println(c.getTime());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
} catch (NotBoundException e) {
e.printStackTrace();
}
}

}


先启动服务器,再启动客户端调用,客户端输出通过RMI从服务器调用得到的时间

热心网友 时间:2023-10-09 05:46

RMI:是指 java 远程调用吗? 如果是这个没什么好说的,百度下找个例子就懂。
ntp:前后发布了几个协议,具体的就没有深究

参考:http://wenku.baidu.com/view/0bb3547702768e9951e738c7.html

个人认为大概可以这么做吧:
1. 客户端 发送一个请求 给服务端,里面包含了客户端发送该请求的 时间(客户端的时间)(T1)

2. 服务端 接收到请求,记录下服务端接收到请求的时间(服务端的时间)(T2)

3. 服务端回发一个请求 给客户端,里面包含了服务端发送该请求的 时间(服务端的时间)(T3)
2. 客户端 接收到请求,记录下接收到请求的时间(客户端的时间)(T4)

所以来回的网络延时 = ( T4 - T3 ) + ( T2 - T1 )

所以收到 T4时, 服务器 的时间 = T3 + 网络延时/2

举个例子吧:(客户端和服务端相差10)

客户端 服务端

(T1) 100 ---------| 110
101 | 111
102 |--------- 112(T2)
103 113
104 114
105 |--------- 115(T3)
106 | 116
(T4)107 ---------| 117

(T2 和T3间的差距取决于服务器的压力,但不影响计算时间)

所以来回的网络延时 = ( T4 - T3 ) + ( T2 - T1 ) = (107-115) + (112-100) = 4

所以收到 T4时, 服务器 的时间 = T3 + 网络延时/2 = 115 + 4/2 = 117追问感谢大神回复,个人的疑惑是,要求是RMI ,网上搜索了相关的简单实例,都是Client端使用naming.lookup来得到Server端相应的Object,而我不知道如何从客户端发送数据到服务器端,找了好久也没对应的方法,我属于超级小白,是不是还要使用udp,Socket什么的,发送数据,这也属于RMI的一部分吗?问题比较弱,望见谅

追答client 端拿到的 只是server 端的实现类的一个代理,其实你完全可以不管他的实现,拿到虚拟对象,直接调用你写的接口的方法就行了,上面有人已经给出详细例子了,你看下吧。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
珍珠粉可以天天敷脸吗 教你自制珍珠粉面膜 中超什么时候成立 交通刷卡金是什么 哪吒V上市进入倒计时,车身超4米,轴距为2420mm,续航里程401km. 关于倩女幽魂爆鬼问题 倩女幽魂什么是大宝队 关于倩女幽魂爆鬼分红的问题 泰国绿咖喱中的咖喱酱是如何制作的,它的独特口味来源于哪些香料?_百度... 好看电视剧,推荐个,现代都市剧,古装剧,战争爱情剧都可以,要经典,确确 ... 去北京上大学转户口好不好 什么是 RMI / IIOP 协议? EJB、RMI、WebService三者之间是什么关系啊? hessian协议和http协议有什么优势和差异 rmi是什么 如何获取spring httpinvoker的rmi服务 j2ee RMI。远程方法调用。什么时候用到,普通一次http会话,或者请求 有没有远程方法调用 什么是 rmi 大叔形总裁电视剧 求各种言情小说,男主一定是大叔啊!!! 推荐一些好看的大叔文/养成文。 男主最好比较成熟的,女主千万不要太白! 例如景行的【喜欢】【沉醉】 男主是大叔的小说 有没有男主是大叔的漫画? 女主是萝莉却有一颗御姐心,男主大叔的身子却是一颗正太心,这是哪部电影? 有没有什么男主角是大叔,女主角是少女的动漫 有没有韩剧男主是帅气大叔的?? 《深夜食堂》中的男主大叔叫什么名字? 深夜食堂中的男主大叔叫什么名字 求现代言情小说 男主是大叔的 大叔控小说男主四五十 《深夜食堂》中男主大叔叫什么名字 RMI 如何实现同步数据传递 RMI建立分布式系统 rmi是多线程处理还是单线程 hessian是rmi还是rpc java RMI客户端也要实现服务端的接口吗 请问corba和RMI有什么区别啊 Java的API中,哪些包是网页专属的,哪些是软件专属的啊? 夏季蕙兰无叶光根怎么养 java RMI如何停止服务器。 如何获取jboss的rmi端口 大花蕙兰该怎么养护? 夏季养大花蕙兰应该怎么养护? 嗨格式数据恢复大师可信吗? 朋友送来一盆大花卉兰,请问我该怎么养? 博士数据恢复大师靠谱吗 数据恢复大师怎么用?还是可以推荐其他恢复软件 金山数据恢复大师怎么恢复误删文件 数据恢复好用吗 数据恢复大师怎么恢复丢 今年是农历什么年? 今年农历是什么年,明年农历是什么年