我对 Java RMI 很陌生,并且遇到了未绑定(bind)异常的问题。我知道这里有很多帖子,但我过去几个小时尝试过的任何内容都没有真正帮助..
这是服务器和客户端的代码。任何帮助都是好的,提前致谢。
最后一件事,当我运行Master时发现异常,当我运行服务器时没有发现错误。
大师:
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.imageio.*;
import java.util.Scanner;
import java.rmi.registry.LocateRegistry;
public class Master {
private ITaskBag1 tb;
private String name = "rmi://" + "127.0.0.1" +":"+1099+"/TaskBagServer";
private int rescount = 0,listcount=0;
private boolean finished = false;
private ArrayList<String> tasks = new ArrayList<String>();
private Random rand;
private double rkey;
public static void main(String[] args){
//pithano lathos
try {
Master m = new Master(args);
} catch (Exception exc) { }
}
Master (String[] args){
rand = new Random();
String url="";
String s1="",s2="",s3="",myLine="",key="";
File myFile=null;
File imgFile = null;
String myFileName="";
String myFileName2="";
StringTokenizer st;
BufferedReader br=null;
int numoftokens = 0;
int endframe = 0;
int degrees = 0;
int eikona = 001;
int i;
double scale = 1.0;
byte[] imageInByte = null;
imageData imdat = null;
imageResult imres = null;
Boolean registered = false;
//Register to ITaskbag
try { //try 1
//try to register
tb = (ITaskBag1) Naming.lookup(name);
}
}
}
服务器:
import java.rmi.*;
import java.rmi.server.*;
import java.rmi.registry.LocateRegistry;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.rmi.Naming;
import java.rmi.registry.LocateRegistry;
public class TaskBagServer{
public static void main(String args[]) {
final int DEFAULT_PORT = 1099;
String sport="";
int port=DEFAULT_PORT;
String connectionstring="//127.0.0.1/TaskbagServer";
//String porterror = "Invalid port specified, " + DEFAULT_PORT + " assumed";
try {
//LocateRegistry.createRegistry(1099);
// connectionstring = "//127.0.0.1:"+port+"/TaskbagServer";
java.rmi.registry.LocateRegistry.createRegistry(1099);
} catch (RemoteException ex) {
Logger.getLogger(TaskBagServer.class.getName()).log(Level.SEVERE, null, ex);
}
try {
TaskBag1 server = new TaskBag1();
Naming.rebind("connectionstring",server);
System.out.println("Taskbag Server Bound");
}
}
}
我认为问题在于您在服务器中的 Naming.rebind()
调用中引用了 connectionstring
变量。这会将 URL 设置为 connectionstring
,而不是您真正想要的。
我是一名优秀的程序员,十分优秀!