java RMI 的问题

问题1 在dos下通过执行start rmiregistry.exe启动了一个注册表进程,简单的说它提供了远程对象的注册服务。当我把一个远程对象注册后,在客户端通过JNDI访问,为什么获取的是一个远程对象的Stub对象?我向里面注册的不是远程对象吗?还是rmiregistry.exe进程就提供了这种机制?

问题2 远程类继承java.rmi.server.UnicastRemoteObject,通过执行exportObject方法,会把一个实现了远程接口的对象导出为远程对象。这个方法到底执行了一个什么样的操作?为什会说“把一个实现了远程接口的对象导出为远程对象”?

问题3 远程对象先创建并注册后才能应用,那我多个客户端程序如何实现访问时服务器都为它们各自生成一个远程对象

问题4 RMI服务器一直在不断的运行,客户端发出的调用请求到底是服务器上哪段程序监听的?

问题5
public static void main(String[] args) {
try {
HelloService service1 = new HelloServiceImpl("service1");
HelloService service2 = new HelloServiceImpl("service2");

        Context namingContext = new InitialContext();
        namingContext.rebind("rmi:HelloService1", service1);
        namingContext.rebind("rmi:HelloService2", service2);
        System.out.println("服务器注册了两个HelloService对象");

    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

为什么这段服务器段程序在执行完System.out.println("服务器注册了两个HelloService对象");
后,当前进程仍然没有结束运行?
有书说,向注册表中注册了两个远程对象,注册表一直引用着这两个对象,使得两个对象不会结束生命周期,因而当前服务器程序也不会结束运行。不同的jvm内存中的对象难道可以引用吗?

问题太多了,不好意思多问了,希望大家能帮我解答,谢谢了!
[b]问题补充:[/b]
lovewhzlq 回答的2和3 我明白了
关于问题1 ,我想做一下补充:在向注册表中注册时,的确是注册的那些远程对象,但客户端通过JNDI获取时获得的是远程对象的Stub,UnicastRemoteObject,通过执行exportObject方法生成一个sketon对象,这个sketon对象保存到什么地方去了,还有客户端用的Stub怎么来的?

我在考虑是不是这个注册表进程,提供了一些满足这些RMI机制,真正实现监听的是不是这个注册表进程

4个回答

问题2 远程类继承java.rmi.server.UnicastRemoteObject,通过执行exportObject方法,会把一个实现了远程接口的对象导出为远程对象。这个方法会为这个需要远程访问的对象生成一个sketon对象(也就是服务端的stud对象),一个实现了远程接口的对象也不过就是一个一般对象(只能在同一个jvm中访问的对象),要让它真正成为远程对象,当然就要把它导出为远程对象(真正的可远程访问的对象)

问题1:看来你没有理解远程对象的含义,远程对象就指另外一个jvm里的对象,可以在不同的pc机里的jvm里的对象,

用JNDI访问获取的一定是一个远程对象的Stub对象,这是rmi内部的实现机制,这个Stub对象封装了远程调用的细节(就是把你要调用的远程对象的信息封装起来,通过底层协议把信息发送到远程对象,)

问题3 远程对象先创建并注册后才能应用,那我多个客户端程序如何实现访问时服务器都为它们各自生成一个远程对象

那你就实现一个远程工厂对象(用来创建你要调用的远程对象),客户端调用这个远程工厂对象的相应创建远程对象的方法就ok了

在向注册表中注册时,的确是注册的那些远程对象,但客户端通过JNDI获取时获得的是远程对象的Stub,(这个当然是这样理解)

UnicastRemoteObject,通过执行exportObject方法生成一个sketon对象,这个sketon对象保存到什么地方那是rmi它本身的内部机制,也许是动态生成或者是生成临时的类放在某个地方,还有客户端用的Stub和sketon对象可以说是相对应产生的

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java rmi连接远程主机问题

问题是这样的,通过rmi来实现分布式通信,用的是20112端口,在本地实现的时候是没问题的,但是部署到主机(亚马逊云机,供外访问ip:54.**.72.52,内部IP是10.0.3.9,有防火墙,但是已经打开20112和20110端口),就不能访问了,错误 java.rmi.ConnectionException:Connetcion refused to host:10.0.3.9;nested exception: java.net.connetionException:connetion time out (我奇怪:外部ip既然能连上,怎么会卡到10.0.3.9那里啊,不应该是一台机子吗?) 然后我在网上找答案:他们说20112端口是rmi通信端口,而数据发送还需要一个端口,需重写一个类,然后我就写了: public class MyRMISocket extends RMISocketFactory { public Socket createSocket(String host, int port) throws IOException { System.out.println("client socket"+host+":"+port); return new Socket(host, port); } @Override public ServerSocket createServerSocket(int port) throws IOException { if (port == 0) { System.out.println("original port is 0"); port = 20110; //不指定就随机分配了 } // port=dataPort; System.out.println("prot"+port); return new ServerSocket(port); } } 按照网上的说法:指定20110来设置固定的端口来穿越防火墙,但是我设置之后,在本地测试的时候发现打印的log根本就没使用这个20110,还是rmi的我指定的那个端口20112,这是为什么,难道在一个网段里面不需要另起端口,还是我的理解有错误? 下面是我的服务端和客户端的连接代码 server: UpdateGatway gatway1=new UpdateGatwayImpl(); RMISocketFactory.setSocketFactory (new MyRMISocket()); System.setProperty("java.rmi.server.hostname", "54.**.72.52"); Registry registry1=LocateRegistry.createRegistry(20112); registry1.rebind("vernumberGW", gatway1); (用Naming绑定的时候出错,就用registry来绑定了) client: UpdateGatway gatway1 = (UpdateGatway) Naming.lookup("//54.**.72.52:20112/vernumberGW"); 如果放到局域网通信没问题,那个服务器是windows系统,我试了 system.setproperty("java.rmi.server.hostname","54.**.72.52") 重写RmiSocketFactory的方法 到现在都不行,只要放到服务器就报错,我在网上看到说要设置 host文件,我也试了,好像没效果,况且他们说的太笼统,我把服务器上的host文件也粘出来吧,大家看看是哪儿的问题, # #127.0.0.1 localhost 我把前面的注释去掉也不行,各位看看是哪儿的问题,如果是host文件的事,那么应该怎么改,谢~!

java rmi连接本机问题

代码如下,然后就运行不出来Naming.rebind之后的那句sysout。也没有异常就是不运行,等了好几分钟还是运行不出来 try { System.out.println("start active server..."); FinanceAccountDataService financeAccountDataService = new FinanceAccountDataImpl(); FinanceReportDataService financeReportDataService = new FinanceReportDataImpl(); FinanceSalaryDataService financeSalaryDataService = new FinanceSalaryDataImpl(); MealDataService mealDataService = new MealDataImpl(); MemberDataService memberDataService=new MemberDataImpl(); PersonnelDataService personnelDataService = new PersonnelDataImpl(); ProcessOrderDataService processOrderDataService = new ProcessOrderDataImpl(); UserDataService userDataService = new UserDataImpl(); WarehouseDataService warehouseDataService = new WarehouseDataImpl(); LocateRegistry.createRegistry(6600); System.out.println("start register services..."); Naming.rebind("rmi://localhost:6600/FinanceAccountDataService", financeAccountDataService); Naming.rebind("rmi://localhost:6600/FinanceReportDataService", financeReportDataService); Naming.rebind("rmi://localhost:6600/FinanceSalaryDataService", financeSalaryDataService); Naming.rebind("rmi://localhost:6600/MealDataService", mealDataService); Naming.rebind("rmi://localhost:6600/MemberDataService", memberDataService); Naming.rebind("rmi://localhost:6600/PersonnelDataService", personnelDataService); Naming.rebind("rmi://localhost:6600/ProcessOrderDataService", processOrderDataService); Naming.rebind("rmi://localhost:6600/UserDataService", userDataService); Naming.rebind("rmi://localhost:6600/WarehouseDataService", warehouseDataService); System.out.println("active server successfully!"); } catch (Exception e) { System.out.println("fail to active server!"); e.printStackTrace(); }

RMI调用的java.rmi.NoSuchObjectException: no such object exception

Server Runner: public interface Triggerable extends Remote {…} Runner obj = new Runner(); stub = (Triggerable) UnicastRemoteObject.exportObject(obj, 0); registry = LocateRegistry.getRegistry(host,port); registry.bind("Hello", stub); Client: Registry runnerRegistry; private Triggerable runner; runnerRegistry = LocateRegistry.getRegistry(ServerConfig.getRunnerIP(),ServerConfig.getRunnerPort()); runner = (Triggerable) runnerRegistry.lookup("Hello"); Server和client2个进程启动后connect 成功。 程序流程: 1. Client: public interface Notifier extends Remote{......} public class RunnerListener implements Notifier{ public void notify(String content) throws RemoteException { .....do some actions here……. UnicastRemoteObject.unexportObject(this, true); } ……. } RunnerListener nf = new RunnerListener(this); Notifier rnf = (Notifier) UnicastRemoteObject.exportObject(nf, 0); String content ="Test"; runner.create(content, rnf); 2. Server:调用client 的notify(); … rnf.notify(content); 问题:client 会根据需要多次生成Notifier 并且调用 Server function with Notifier object. Server 做完相应的操作后,会回调 client 的 函数 rnf.notify(content)。 刚开始1,2天工作正常,但往后时不时的就会出现调用异常。 java.rmi.NoSuchObjectException: no such object in table at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:283) at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:260) at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:161) at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:227) at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:179) at com.sun.proxy.$Proxy1.notify(Unknown Source) 问题是:server端调用client 的notify(), 有的对象可以调用成功,有的对象调用失败。如果说registry 对象被回收,后续的所有调用都应该失败。那就有可能是client export的notifier对象被回收,那该如何处理? 另外,这段代码在java1.7 上一直运行良好,改到 1.8.0_65后,就出现了这个问题。 有哪位大侠遇到过此类问题?有请多指教。

RMI异常,java.rmi.ConnectException: Connection refused to host

[code="java"] String name = "Compute"; HelloWorldCompute engine = new HelloWorldEngine(); HelloWorldCompute stub = (HelloWorldCompute) UnicastRemoteObject.exportObject(engine, 8888); Registry registry = LocateRegistry.getRegistry(); registry.rebind(name, stub);[/code] 执行最后一句,抛出异常 java.rmi.ConnectException: Connection refused to host: 10.200.1.184; nested exception is: java.net.ConnectException: Connection refused: connect 什么原因啊

JAVA RMI在虚拟机中测试报错?

JAVA RMI在本机和虚拟机之间实验报错。我将本机当成服务端 虚拟机当成客户 端时客户端报错了 服务端的远程接口和方法都没问题 ![图片说明](https://img-ask.csdn.net/upload/201909/13/1568361391_609063.png)![图片说明](https://img-ask.csdn.net/upload/201909/13/1568361403_942708.png)

通过Java RMI的定时GC触发,JVM垃圾回收就无法自动触发FULL GC了吗?

Java RMI的定时GC触发机制,可通过:-XX:+DisableExplicitGC来禁止或通过 -Dsun.rmi.dgc.server.gcInterval=3600000来控制触发的时间。 那么问题来了堆栈内存满了,是否就不会自动触发FULL GC了。 目前系统几次宕机,看内存监控均为堆栈满了,但是没能触发FULL GC。 看应用服务启动配置中有Dsun.rmi.dgc.server.gcInterval=3600000这个配置,麻烦懂得人帮确认下我上面的疑问。 如果是,那如何定时触发GC并且能够在堆栈快满了也能自动触发GC,应该如何配置。

Java RMI疑问(stub、classpath相关)

最近在看之前搞得RMI的东西,搞了好久还是有很多东西没明白,这里列出来希望大家能帮忙解答下==,也算是自己备忘 1. 说jdk1.5之后RMI的stub是动态生成的,这个是利用动态代理吗? 那1.5之前的stub生成会不会类似cglib之类的了-- 2. 如果是动态生成的话,是否仍然需要在registry那边设置classpath?(自己测试,包名不同的registery和远程对象分别部署时好像还是会报ClassNotFound错误) 3. RMI通信的时候,server端端口貌似可以固定,但是好像还会使用随机端口跟client通信(数据端口?) 这个端口有没有方法也固定住? 之后再看下spring的实现,之前用spring好像可以做到端口固定 谢谢~~

[请教]rmi怎么实现自己写的对象的传递?

报这个异常 RemoteException java.rmi.UnmarshalException: error unmarshalling return; nested exception is:      java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: edu.bupt.rmi.ComputingUnit   我把ComputingUnit类实现了Serializable接口还报这个错 求教啊

RMI本地client调用远程服务器上的server报错

代码这篇文章上的。 [Java RMI之HelloWorld篇](http://lavasoft.blog.51cto.com/62575/91679/ "") 我把ihello,helloimpl,server放在了服务器上,client放在了本机电脑的eclipse中 保证远程服务器上的server正常运行,运行client报错 Caused by: java.lang.ClassNotFoundException: IHello (no security manager: RMI class loader disabled) 查了下资料 参考[解决no security manager: RMI classloader disable ](http://blog.sina.com.cn/s/blog_58c679ff0100a3zi.html "") 将服务器上的server代码改了一下,将helloimpl放在了server的内部, 再次运行依然报错。 求大神帮忙解决下. 新人菜鸟一只。 谢谢

RMI连接问题

先贴下异常信息: Lookup of RMI stub failed; nested exception is java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is: java.net.SocketException: Connection reset org.springframework.remoting.RemoteLookupFailureException: Lookup of RMI stub failed; nested exception is java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is: java.net.SocketException: Connection reset at org.springframework.remoting.rmi.RmiClientInterceptor.lookupStub(RmiClientInterceptor.java:215) at org.springframework.remoting.rmi.RmiClientInterceptor.getStub(RmiClientInterceptor.java:237) at org.springframework.remoting.rmi.RmiClientInterceptor.invoke(RmiClientInterceptor.java:257) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202) at $Proxy2.handleEvent(Unknown Source) at com.ffcs.oss.snms.fm.services.dataservice.EventSenderImpl.handleEvent(EventSenderImpl.java:219) at com.ffcs.oss.snms.fm.services.dataservice.EventSenderImpl.sendEventTask(EventSenderImpl.java:191) at com.ffcs.oss.snms.fm.services.dataservice.EventSenderImpl.access$0(EventSenderImpl.java:173) at com.ffcs.oss.snms.fm.services.dataservice.EventSenderImpl$ResSendTask.run(EventSenderImpl.java:166) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317) at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:180) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:204) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662) Caused by: java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is: java.net.SocketException: Connection reset at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:286) at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:184) at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:322) at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source) at java.rmi.Naming.lookup(Naming.java:84) at org.springframework.remoting.rmi.RmiClientInterceptor.lookupStub(RmiClientInterceptor.java:200) ... 18 more Caused by: java.net.SocketException: Connection reset at java.net.SocketInputStream.read(SocketInputStream.java:168) at java.io.BufferedInputStream.fill(BufferedInputStream.java:218) at java.io.BufferedInputStream.read(BufferedInputStream.java:237) at java.io.DataInputStream.readByte(DataInputStream.java:248) at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:228) ... 23 more 问题描述:在同一台linux服务器同时发布N个RMI服务,当这个N大于某个数据时,有的服务被调用时就报了这个异常,调用该服务的客户端有的连接正常,有的连接会报这个错误,我关掉了任意一个正常或非正常的服务,其他所有服务都通了,这个问题貌似是linux对连接数做了限制吗?有知道的rmi哥哥或者linux哥哥指点下

咨询一个spring做rmi在服务器之间连接不通的问题

使用spring写了一个rmi的服务端和客户端程序,服务端以jar包部署到服务器a。客户端以用spring将这个rmi注入到service,本地程序调试时调用服务器a上的rmi成功。但是把客户端程序部署到服务器b,从b telnet到a是通的,并且部署时spring没有报错,可是在调用时,报以下错误,错误中的host就是a机器的ip。之后尝试把rmi部署到和客户端同一个机器b,也能调用到,这就奇怪了为什么b调用a异常,求教各位有没有相关经验 java.rmi.ConnectException: Connection refused to host: 10.60.12.100; nested exception is: java.net.ConnectException: 连接超时

java rmi 时间过长没返回值

编写的服务端在linux系统下运行,当服务端运行时间超过10分钟,那么客户端就不能获取服务端运行结束的结果, 客户端一直挂起,而如果服务端运行时间在10分钟内,那么客户端可以接收到服务端运行的结果。各位大神,这个问题怎么解决啊?急!!! 服务端代码部分: public static void main(String[] args) { GetProperties gp = new GetProperties(); String url = gp.getValue("url"); String post = gp.getValue("post"); try { LocateRegistry.createRegistry(Integer.parseInt(post)); FileChangeAndLoad fs = new FileChangeAndLoadImpl(); Naming.rebind(url, fs); } catch (NumberFormatException e) { e.printStackTrace(); } catch (RemoteException e) { e.printStackTrace(); } catch (MalformedURLException e) { e.printStackTrace(); } } 客户端代码部分: try { FileChangeAndLoad fcal =(FileChangeAndLoad)Naming.lookup( new GetProperties().getValue("url")); String str = fcal.getFile(); System.out.println(str); } catch (MalformedURLException e) { e.printStackTrace(); } catch (RemoteException e) { e.printStackTrace(); } catch (NotBoundException e) { e.printStackTrace(); }

请教个rmi 动态类加载 问题

客户端设了securitymanager,服务端设了java.rmi.server.codebase, http://127.0.0.1:8080/ 是有类文件的,通过浏览器能访问到 但是当我启动HelloServer后,再启动HelloClient,客户端就报错 java.lang.ClassNotFoundException: rmi.Client at java.net.URLClassLoader$1.run(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.rmi.server.LoaderHandler$Loader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Unknown Source) at sun.rmi.server.LoaderHandler.loadClassForName(Unknown Source) at sun.rmi.server.LoaderHandler.loadClass(Unknown Source) at sun.rmi.server.LoaderHandler.loadClass(Unknown Source) at java.rmi.server.RMIClassLoader$2.loadClass(Unknown Source) at java.rmi.server.RMIClassLoader.loadClass(Unknown Source) at sun.rmi.server.MarshalInputStream.resolveClass(Unknown Source) at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source) at java.io.ObjectInputStream.readClassDesc(Unknown Source) at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source) at java.io.ObjectInputStream.readObject0(Unknown Source) at java.io.ObjectInputStream.readObject(Unknown Source) at sun.rmi.server.UnicastRef.unmarshalValue(Unknown Source) at sun.rmi.server.UnicastRef.invoke(Unknown Source) at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(Unknown Source) at java.rmi.server.RemoteObjectInvocationHandler.invoke(Unknown Source) at com.sun.proxy.$Proxy0.login(Unknown Source) at rmi.HelloClient.main(HelloClient.java:36) rmi.Client是远程调用返回的可序列化的类

RMI中参数为Input出现的问题

在JDK 的RMI中我有个方法需要传参数,参数为InputStream,在远程调用的的时候报错, 这是我客户端代码 [code="java"] try { ICheckServer rmi = (ICheckServer) Naming.lookup("rmi://127.0.0.1:2012/checkserver"); InputStream in = new Thread().getContextClassLoader().getResourceAsStream("jolt-config.xml"); rmi.initTuxedoConnect(in); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } [/code] 错误信息: java.rmi.MarshalException: error marshalling arguments; nested exception is: java.io.NotSerializableException: java.io.BufferedInputStream at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:138) at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:178) at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:132) at $Proxy0.initTuxedoConnect(Unknown Source) at test.Test.main(Test.java:18) Caused by: java.io.NotSerializableException: java.io.BufferedInputStream at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1156) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:326) at sun.rmi.server.UnicastRef.marshalValue(UnicastRef.java:274) at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:133)

java工程打成jar包,远程RMI访问服务端异常

java RMI 本地调用服务器端正常 本地工程打成jar包调用就失败了, 经调试类可以找到,方法调用时服务端并未收到请求;

现在java是不是完全不用applet了?还是都改成用RMI了?

鄙人有那么一点粗浅的Java开发经验,想继续再向深入学习。由于有时感觉B/S架构下java所能做的事太少了,比如要远程操作客户端文件系统,创建下载目录等几乎是不可能。一直觉得applet是自己学java以来的一块神秘领域,想学学看能不能干点事,但是又怕学了对如今的开发没有多大作用。莫非真的动辄就要用EJB呀,什么RMI呀等等。。。如果学RMI又应该如何学起呢?

Linux系统引起java.net.SocketException: Broken pipe的原因?

有两台linux服务器A、B 系统版本都是 Red Hat Enterprise Linux Server release 6.0 (Santiago) JDK版本都是 1.6.0_29 在A端发布一个RMI服务,配置如下 <bean id="rmiServerHost" factory-method="setProperty" class="java.lang.System" lazy-init="false"> <constructor-arg value="java.rmi.server.hostname"/> <constructor-arg value="${rmiServerHost}"/> </bean> <bean factory-method="setProperty" class="java.lang.System" lazy-init="false"> <constructor-arg value="java.rmi.dgc.leaseValue"/> <constructor-arg value="300000"/> </bean> <bean factory-method="setProperty" class="java.lang.System" lazy-init="false"> <constructor-arg value="java.rmi.dgc.gcInterval"/> <constructor-arg value="900000"/> </bean> <!--接收数据服务(下层模块提交的数据)--> <bean id="eventProcessor" class="com.dataservice.EventProcessorImpl"/> <bean id="rmiEventProcess" class="org.springframework.remoting.rmi.RmiServiceExporter"> <property name="serviceName" value="dataservice/eventProcessor" /> <property name="service" ref="eventProcessor" /> <property name="serviceInterface" value="com.dataservice.EventProcessor" /> <property name="registryPort" value="${registryPort}"/> <property name="servicePort" value="${registryPort}"/> </bean> B端为客户端,配置如下 <!--目标模块数据处理配置--> <bean id="rmiEventProcessorClient" class="org.springframework.remoting.rmi.RmiProxyFactoryBean"> <property name="serviceUrl" value="${targetAddr}" /> <property name="serviceInterface" value="com.dataservice.EventProcessor" /> <property name="refreshStubOnConnectFailure" value="true"></property> </bean> 情况是这样的,B端在调用A端发布的服务时,间歇性的出现如下异常。 异常信息:error marshalling arguments; nested exception is: java.net.SocketException: Broken pipe java.rmi.MarshalException: error marshalling arguments; nested exception is: java.net.SocketException: Broken pipe at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:138) at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:178) at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:132) at $Proxy0.invoke(Unknown Source) at org.springframework.remoting.rmi.RmiClientInterceptor.doInvoke(RmiClientInterceptor.java:398) at org.springframework.remoting.rmi.RmiClientInterceptor.doInvoke(RmiClientInterceptor.java:344) at org.springframework.remoting.rmi.RmiClientInterceptor.invoke(RmiClientInterceptor.java:259) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202) at $Proxy1.handleEvent(Unknown Source) at com.dataservice.EventSenderImpl.handleEvent(EventSenderImpl.java:220) at com.dataservice.EventSenderImpl.sendEventTask(EventSenderImpl.java:191) at com.dataservice.EventSenderImpl.access$0(EventSenderImpl.java:173) at com.dataservice.EventSenderImpl$ResSendTask.run(EventSenderImpl.java:166) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317) at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:180) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:204) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662) Caused by: java.net.SocketException: Broken pipe at java.net.SocketOutputStream.socketWrite0(Native Method) at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92) at java.net.SocketOutputStream.write(SocketOutputStream.java:136) at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65) at java.io.BufferedOutputStream.write(BufferedOutputStream.java:109) at java.io.ObjectOutputStream$BlockDataOutputStream.drain(ObjectOutputStream.java:1847) at java.io.ObjectOutputStream$BlockDataOutputStream.writeByte(ObjectOutputStream.java:1885) at java.io.ObjectOutputStream.writeFatalException(ObjectOutputStream.java:1546) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:333) at sun.rmi.server.UnicastRef.marshalValue(UnicastRef.java:274) at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:133) ... 22 more 补充:相同的程序,放在linux版本相同,JDK版本相同的服务器C去调用A不会出现以上问题,B、和C的防火墙策略是相同的,防火墙关了也会有这个问题,就算把服务端部署在B,B内部调用也会间歇性出现该问题。 奔溃了,搞不定啊,求解。。。。

阿里云下使用RMI连接失败

服务器端可以启动成功,但是客户端连接失败 ![图片说明](https://img-ask.csdn.net/upload/201706/25/1498384236_310659.png) 上图出现的地址是我的阿里云的私有地址,但是我在 Naming.lookup("rmi://x.x.x.x")中填写的是阿里云的外部地址 请问具体该如何设置才能使RMI生效

YOLOv3目标检测实战:训练自己的数据集

YOLOv3目标检测实战:训练自己的数据集

150讲轻松搞定Python网络爬虫

150讲轻松搞定Python网络爬虫

实用主义学Python(小白也容易上手的Python实用案例)

实用主义学Python(小白也容易上手的Python实用案例)

我说我不会算法,阿里把我挂了。

不说了,字节跳动也反手把我挂了。

立方体线框模型透视投影 (计算机图形学实验)

计算机图形学实验 立方体线框模型透视投影 的可执行文件,亲测可运行,若需报告可以联系我,期待和各位交流

2019 AI开发者大会

2019 AI开发者大会

组成原理课程设计(实现机器数的真值还原等功能)

实现机器数的真值还原(定点小数)、定点小数的单符号位补码加减运算、定点小数的补码乘法运算和浮点数的加减运算。

C/C++跨平台研发从基础到高阶实战系列套餐

一 专题从基础的C语言核心到c++ 和stl完成基础强化; 二 再到数据结构,设计模式完成专业计算机技能强化; 三 通过跨平台网络编程,linux编程,qt界面编程,mfc编程,windows编程,c++与lua联合编程来完成应用强化 四 最后通过基于ffmpeg的音视频播放器,直播推流,屏幕录像,

MFC一站式终极全套课程包

该套餐共包含从C小白到C++到MFC的全部课程,整套学下来绝对成为一名C++大牛!!!

软件测试2小时入门

软件测试2小时入门

三个项目玩转深度学习(附1G源码)

三个项目玩转深度学习(附1G源码)

计算机图形学-球的光照模型课程设计

计算机图形学-球的光照模型,有代码完美运行,有课程设计书

Linux常用命令大全(非常全!!!)

Linux常用命令大全(非常全!!!) 最近都在和Linux打交道,感觉还不错。我觉得Linux相比windows比较麻烦的就是很多东西都要用命令来控制,当然,这也是很多人喜欢linux的原因,比较短小但却功能强大。我将我了解到的命令列举一下,仅供大家参考: 系统信息 arch 显示机器的处理器架构 uname -m 显示机器的处理器架构 uname -r 显示正在使用的内核版本 d...

因为看了这些书,我大二就拿了华为Offer

四年了,四年,你知道大学这四年我怎么过的么?

深度学习原理+项目实战+算法详解+主流框架(套餐)

深度学习系列课程从深度学习基础知识点开始讲解一步步进入神经网络的世界再到卷积和递归神经网络,详解各大经典网络架构。实战部分选择当下最火爆深度学习框架PyTorch与Tensorflow/Keras,全程实战演示框架核心使用与建模方法。项目实战部分选择计算机视觉与自然语言处理领域经典项目,从零开始详解算法原理,debug模式逐行代码解读。适合准备就业和转行的同学们加入学习! 建议按照下列课程顺序来进行学习 (1)掌握深度学习必备经典网络架构 (2)深度框架实战方法 (3)计算机视觉与自然语言处理项目实战。(按照课程排列顺序即可)

fakeLocation13.5.1.zip

fakeLocation13.5.1 虚拟定位 ios13.5.1的最新驱动下载,iPhone/iPad免越狱虚拟定位工具Location-cleaned驱动已更新

UnityLicence

UnityLicence

Python可以这样学(第一季:Python内功修炼)

Python可以这样学(第一季:Python内功修炼)

Python+OpenCV计算机视觉

Python+OpenCV计算机视觉

土豆浏览器

土豆浏览器可以用来看各种搞笑、电影、电视剧视频

【数据结构与算法综合实验】欢乐连连看(C++ & MFC)案例

这是武汉理工大学计算机学院数据结构与算法综合实验课程的第三次项目:欢乐连连看(C++ & MFC)迭代开发代码。运行环境:VS2017。已经实现功能:开始游戏、消子、判断胜负、提示、重排、计时、帮助。

php+mysql学生成绩管理系统

学生成绩管理系统,分三个模块:学生,教师和管理员。 管理员模块:负责学生、老师信息的增删改;发布课程信息的增删改,以便让学生选课;审核老师提交的学生成绩并且打印成绩存档;按照课号查询每个课号的学生成绩

多功能数字钟.zip

利用数字电子计数知识设计并制作的数字电子钟(含multisim仿真),该数字钟具有显示星期、24小时制时间、闹铃、整点报时、时间校准功能

推荐24个国外黄色网站欣赏

在中国清朝,明黄色的衣服只有皇子才有资格穿,慢慢的黄色在中国就成了高贵的颜色。在人们的色彩印象中,黄色也表现为暂停。所以当你的网页设计采用黄色的时候,会让人们在你的网页前停留。 黄色,就像橙色和红色,黄色也是一个暖色。它有大自然、阳光、春天的涵义,而且通常被认为是一个快乐和有希望的色彩。黄色是所有色相中最能发光的颜色,给人轻快,透明,辉煌,充满希望的色彩印象。 黄色是一个高可见的色...

u-boot-2015.07.tar.bz2

uboot-2015-07最新代码,喜欢的朋友请拿去

一学即懂的计算机视觉(第一季)

一学即懂的计算机视觉(第一季)

学生成绩管理系统(PHP + MYSQL)

做的是数据库课程设计,使用的php + MySQL,本来是黄金搭配也就没啥说的,推荐使用wamp服务器,里面有详细的使用说明,带有界面的啊!呵呵 不行的话,可以给我留言!

Windows版YOLOv4目标检测实战:训练自己的数据集

Windows版YOLOv4目标检测实战:训练自己的数据集

C++语言基础视频教程

C++语言基础视频教程

玩转Python-Python3基础入门

玩转Python-Python3基础入门

2019校招硬件乐鑫+比特大陆笔试题

楼主水硕一枚,参加了2019年的秋招。自己总结了下乐鑫的笔试题目(现场笔试)以及网上考试的比特大陆的题目

相关热词 c#跨线程停止timer c#批量写入sql数据库 c# 自动安装浏览器 c#语言基础考试题 c# 偏移量打印是什么 c# 绘制曲线图 c#框体中的退出函数 c# 按钮透明背景 c# idl 混编出错 c#在位置0处没有任何行
立即提问