0

SampleServer という名前のサーバーを実行しようとしています。私はWindowsを使用していますが、これが私がしたことです:

コマンドで:

javaw rmiregistry 1099
cd C:\Users\Home\workspace\RMI\src
java -Djava.security.policy=policy SampleServer 1099

次のエラーが表示されます。

binding //localhost:1099/Sample
New instance of Sample created
Sample server failed:Connection refused to host: localhost; nested exception is:

        java.net.ConnectException: Connection refused: connect

rmir​​egistry に 4719 などの別のポート番号を使用しようとしましたが、同じエラーが発生します。ファイアウォールが無効になっていることを確認しましたが、問題は解決しません。ポートがまだ使用されていないことを確認しました。誰かが私を助けてくれることを本当に願っています。

プロジェクト、Eclipse ウィンドウ、および cmd のフォルダーが開いているデスクトップの写真: http://s22.postimg.org/uq00qzslr/picyture.png

コード:

サンプルサーバー:

import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.RMISecurityManager;
import java.rmi.server.UnicastRemoteObject;

public class SampleServer {
    public static void main(String args[]) {
        if (args.length != 1) {
            System.err.println("usage: java SampleServer rmi_port");
            System.exit(1);
        }
        // Create and install a security manager
        if (System.getSecurityManager() == null)
            System.setSecurityManager(new RMISecurityManager());
        try {
            // first command-line argument is the port of the rmiregistry
            int port = Integer.parseInt(args[0]);
            String url = "//localhost:" + port + "/Sample";
            System.out.println("binding " + url);
            Naming.rebind(url, new Sample());
            // Naming.rebind("Sample", new Sample());
            System.out.println("server " + url + " is running...");
        }
        catch (Exception e) {
            System.out.println("Sample server failed:" + e.getMessage());
        }
    }
}

サンプルクライアント:

import java.rmi.Naming;
import java.rmi.RemoteException;

public class SampleClient  {
    public static void main(String args[]) {
        try {
            if (args.length < 3) {
                System.err.println("usage: java SampleClient host port string... \n");
                System.exit(1);
            }

            int port = Integer.parseInt(args[1]);
            String url = "//" + args[0] + ":" + port + "/Sample";
            System.out.println("looking up " + url);

            SampleInterface sample = (SampleInterface)Naming.lookup(url);

            // args[2] onward are the strings we want to reverse
            for (int i=2; i < args.length; ++i)
                // call the remote method and print the return
                System.out.println(sample.invert(args[i]));
        } catch(Exception e) {
            System.out.println("SampleClient exception: " + e);
        }
    }
}

サンプル インターフェース:

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface SampleInterface extends Remote {
    public String invert(String msg) throws RemoteException;
}

サンプル:

import java.rmi.Remote;
import java.rmi.RemoteException;
import java.rmi.server.*;

// this is the class with remote methods

public class Sample
  extends UnicastRemoteObject
  implements SampleInterface {

    private int a;

    public Sample() throws RemoteException {
    System.out.println("New instance of Sample created");
    a = 1;
    }

    public String invert(String m) throws RemoteException {
        // return input message with characters reversed
        System.out.println("invert("+m+") a=" + a);
        return new StringBuffer(m).reverse().toString();
    }
}

ポリシー:

grant {
    permission java.security.AllPermission;
};
4

2 に答える 2

1

このエラーは、接続しようとしているポートでサービスが実行されていない場合に発生します。EJPrmiregistryが言ったように、バックグラウンドで起動できるツールですrmiregistry &(JDK 7)。ファイアウォールまたはポートの接続の問題を確認することをお勧めします。

于 2013-10-26T09:00:30.187 に答える
1

javaw rmiregistry 1099

すぐそこでやめなさい。これはすでに間違っています。「rmiregistry」は実行可能ファイルであり、「java」または「javaw」で実行できる Java クラスの名前ではありません。「rmiregistry」を使用してください。

于 2013-10-26T08:39:01.727 に答える