Tag: rmi

如何在RMI回调中正确识别和保存客户端引用?

我有一个服务器和几个“客户端”(服务器实际上是因为回调)。 客户端只能通过服务器向另一个发送消息。 为此,服务器必须: 识别呼叫客户端。 保存客户端的信息并导出对象引用,以便能够查找收件人。 我已经阅读了远程会话模式( 1,2,3 )以及这里和这里 ,但我找不到我想要的答案。 对于(1),我看到以下选项: 客户端在调用服务器期间发送其导出的对象引用。 客户端在呼叫服务器期间发送一些标识信息。 客户端使用getClientHost标识。 收件人必须作为一些身份信息发送,因为客户端不会相互引用。 public interface RemoteClient extends Remote { void message(String sender, String message); } public interface RemoteServer extends Remote { void relayMessage(String recipient, RemoteClient sender, String msg); // or some identifier? // or string/identifier? } public class RemoteServerImpl extends UnicastRemoteObject implements RemoteServer { […]

更新活动频道的JList时出现问题

介绍: 我创建了一个聊天程序,客户端连接服务器。 客户端能够加入通道,当它们这样做时,jList(请参阅代码)应该通过DefaultListModel更新(getChannel()),并且应该显示连接到同一通道的所有其他客户端。 我知道getChannel(); 工作,因为我已经调试它(并使用systemoutprint)。 我已经有活动频道和用户在线的Jlists,这有效! 🙂 客户端使用回调方法通知连接到服务器的其他客户端。 我已经完成了一些调试,而且我一直在尝试重复我的代码。 inheritance人代码: 服务器: private Hashtable<String, ArrayList> channels = new Hashtable<String, ArrayList>(); public void connectChannel(String username, String channel) throws RemoteException{ setUsername(username); if(isUserRegistered(username)){ if (!channels.containsKey(channel)) { String message = “User ” + username + ” entered the channel”; channels.put(channel, new ArrayList()); channels.get(channel).add(username); notifyChannelSystem(channel, “SYSTEM”, message); notifySelf(username, “Write /? for […]

为什么java RMI无法通过引用获得返回值

在RMI中,我只能获得返回值 InetSocketAddress address = new InetSocketAddress(hostname, port); Server server = Stub.create(Server.class, address); int return = server.getValue(); 但是,我无法得到它 public class Return { int value; } InetSocketAddress address = new InetSocketAddress(hostname, port); Server server = Stub.create(Server.class, address); Return return = new Return(); server.getValue(return); 我知道参数将被序列化和反序列化,但这不是我的问题,我的问题是“为什么Java不能模拟传入引用作为传入in-out,就像在C中使用RPC一样?”,I认为它与java环境有关。 通过in-out我的意思是在C中使用RPC,你可以获得返回值 int return; rpc.getValue(&return); 希望现在我的问题很明确。

java中的桌面共享

我想创建一个非常简单的RMI代码,它只是共享桌面。 我已经创建了我的类和远程接口。在Share类中,我有一个execute方法,它将返回客户端桌面的图像。但我不知道如何获取该图像?或者我如何存储它? 请帮帮我,谢谢。 分享课程: class Share implements Task,Serializable{ public Share(){ } public DesktopPaneUI execute() { } } 任务类: public interface Task { T execute(); }

Spring Async RMI Call

是否可以异步调用Java RMI? 我希望我的RMI调用立即返回,并且服务器在任务完成后调用回调。 我目前正在使用Spring框架的RMI支持,我在spring找不到任何描述它的文档,我怀疑我需要自己实现它。 如果可能,请提供示例。 提前致谢!

JAVA:RMI回调 – >对象已导出

这是我的第一个问题,很抱歉,如果我说错了,我的英语。 我必须在java中做一个分布式挂起项目,有客人,玩家和主人(更多匹配)。 当用户(已经注册)自己登录或主人打开比赛时,服务器必须通知所有客人(仅限客人)该事件。 在客户端我必须创建2个存根,1为服务器,另一个为图形界面(swing)。 线程池用于管理匹配,现在不使用。 这是客户端代码: package User; public class Utente extends RemoteServer implements UserInterface, GraphicInterface,Serializable { private static final long serialVersionUID = 2L; private String name; private String password; private String host = “localhost”; private Socket soc; private int port = 1800; private UserInterface stub = null; private RegistryInterface server_interface = null; private Registry […]

Java中的网络通信选项(客户端/服务器)

有一个RMI,我理解它是相对脆弱的,直接的Socket连接,这是相当低级别的,而字符串,虽然它一样坚实,但似乎是隐喻的PHP。 对于基于Internet的客户端/服务器通信,我有哪些基本选项? 有什么优点/缺点? 我应该考虑哪些问题? 第三方库建议很好,只要它们保持平台独立(即没有限制性的本机代码)。 寻找选项,而不是一个明确的答案,所以我将我自己的要求的细节留空。

IPC建议大量小数据

我们将实施一个多进程软件,我们正在寻找一个合适的IPC。 事实: 我们将使用Java(如果我们面临时间关键的话,我会使用C) 所有进程都在一台Unix机器上。 这些进程每秒发送大量(约1000个)小(约4k)数据。 你推荐什么IPC技术? Web服务,RMI,TCP套接字,Unix套接字,管道,……?

如何自动将数据复制到新的RMI线程?

我正在调整一个小的rmi客户端 – 服务器应用程序。 我写过几件事: HelloInterface -> A Hello World interface for RMI Server -> The server app’ Client -> The client app’ 没什么特别的,但是……我已经把手放在一个新的RMISecurityManager中,它调用一个JNI方法并检查一个单独用户的权限: package rmi; import java.rmi.RMISecurityManager; import java.io.*; public class NativeRMISecurityManager extends RMISecurityManager { private boolean unix; protected static ThreadLocal user = new ThreadLocal(); /* * On interdit l’utilisation du constructeur par defaut * […]

Java RMI客户端网络连接拒绝故障排除

这从来没有工作过 – 我是第一次设置环境。 下面的多个更新 我的RMI服务器在“守护进程”类型的进程中运行,因为我希望它在系统启动时像服务一样运行(不使用xinitdfunction),所以我可以使用SSL,所以我可以给守护进程命令与通过单独机制进入注册表的内容有关。 (IOW,我没有使用像Runtime.getRuntime().exec(“rmiregistry 2020”); ) 我知道RMI服务器已启动并运行,因为它可以正常工作: telnet localhost 我的客户端代码将许多用于SSL的环境变量编码到命令行中以启动它 – 稍后,我将以编程方式进行,但是现在,它开始于: $ java -Djavax.net.ssl.trustStore=/var/RMIssl/truststore -Djavax.net.ssl.trustStorePassword= -Djava.rmi.server.hostname=localhost my.package.Test 起初我得到的是: java.rmi.ConnectException: Connection refused to host: localhost; nested excepti on is: java.net.ConnectException: Connection refused 这几乎没用,除了有错误。 所以,我仔细检查了各种方式,最后用刷新输入了一些跟踪语句,并将其添加到命令行: -Djavax.net.debug=all 这有点难以理解,但仍然很难弄清楚错误的位置,所以我将可疑行放入循环中,捕获exception,现在很清楚它是在注册表中查找特定对象的问题,虽然错误信息确实似乎有误导性。 这是我得到的: $ java -Djavax.net.debug=all -Djavax.net.ssl.trustStore=/var/RMIssl/truststore -Djavax.net.ssl.trustStorePassword= -Djava.rmi.server.hostname=localhost my.package.Test Setup the security manager. Find the registry. Lookup testClient. […]