RMI程序执行
问题描述:
============服务器接口:Server.java ================RMI程序执行
import java.rmi.*; public interface Server extends Remote { void register (Client cl) throws RemoteException; void broadcastCord() throws RemoteException; } =============Server Class:ServerImpl.java=============== import java.rmi.*; import java.rmi.server.*; import java.util.*; import java.net.*; public class ServerImpl extends UnicastRemoteObject implements Server { public ServerImpl() throws RemoteException { } public synchronized void register (Client cl) throws RemoteException { System.out.println("===>register Method of Process:"); cl.receiveInq(); } //=========Broadcast Inquiry================== public synchronized void broadcastCord() throws RemoteException { System.out.println("===>broadcastCord Method of Process:"); } //==============Main Function=================== public static void main (String[] args) { try { System.out.println(InetAddress.getLocalHost().toString()); Naming.rebind("Server", new ServerImpl()); } catch(Exception e) { System.err.println("Problem..."+e) ; } } } ============Client InterfaceClient.java:============= import java.rmi.*; public interface Client extends Remote { void receiveInq() throws RemoteException; void receiveGrt() throws RemoteException; } ==============Client Class:ClientImpl.java============== import java.rmi.*; import java.rmi.registry.*; import java.rmi.server.*; import java.net.*; import java.util.*; import javax.swing.*; import java.awt.event.*; import java.net.*; import java.io.*; import java.awt.*; import javax.swing.*; public class ClientImpl extends java.rmi.server.UnicastRemoteObject implements Client { private Server mycs; public ClientImpl(Server cs) throws RemoteException { mycs=cs; mycs.register(this); } //=====Greater List======== public synchronized void receiveGrt() throws RemoteException { System.out.println("===>recieveGRT Method of Process:"); } //=====RECIEVE INQUIRY======== public synchronized void receiveInq() throws RemoteException { System.out.println("===>receiveInq Method of Process:"); mycs.broadcastCord(); } public static void main(String args[]) { String url = "rmi://localhost:1099/Server"; try{ Server cs= (Server) Naming.lookup(url); new ClientImpl(cs); } catch(Exception e) { System.err.println("Problem..\n"+e) ; } } }
它不完全执行.......如果我们关闭客户端程序执行 完成....但我不知道为什么它不能正确执行....它不会抛出任何 异常
答
删除'synchronized'。你陷入僵局。 RMI回调在与原始调用不同的线程上执行。
你期望的行为究竟是什么? – Steven
一旦客户端启动...它调用服务器的注册方法....它依次调用客户端的recieveInq方法....该服务器调用服务器的broadcastCord ....是执行挂断..... im nt得到为什么broadcastCord不执行...可以给我解决方案.. – Sujay