Java RMI程序执行
=============服务器接口:Server.java================Java RMI程序执行,java,rmi,Java,Rmi,=============服务器接口:Server.java================ import java.rmi.*; public interface Server extends Remote { void register (Client cl) throws RemoteException; void broadcastCord () throws RemoteException; } =============Server Class:ServerImpl
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) ;
}
}
}
它不能完全执行……如果我们关闭客户端程序
完成…但我不知道为什么它不能正确执行…它不会抛出任何错误
例外情况
删除“已同步”。你陷入僵局了。RMI回调在与原始调用不同的线程上执行。您希望具体的行为是什么?一旦客户端启动…它调用服务器的register方法…然后调用客户端的ReceiveInq方法…den调用服务器的broadcastCord…这就是执行挂起的原因。。。。。我不明白为什么广播线不起作用……你能给我一个解决方案吗。。