2011-10-09 66 views
-1

============服务器接口: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) ; 
     } 
     } 
} 

它不完全执行.......如果我们关闭客户端程序执行 完成....但我不知道为什么它不能正确执行....它不会抛出任何 异常

+0

你期望的行为究竟是什么? – Steven

+0

一旦客户端启动...它调用服务器的注册方法....它依次调用客户端的recieveInq方法....该服务器调用服务器的broadcastCord ....是执行挂断..... im nt得到为什么broadcastCord不执行...可以给我解决方案.. – Sujay

回答

1

删除'synchronized'。你陷入僵局。 RMI回调在与原始调用不同的线程上执行。