7

Java で何年も働いた後、初めて RMI に足を踏み入れました。基本を理解するためにこのチュートリアルに従っています。以下のサーバー コードでは、ポート 1099 が既に使用されているという例外が表示されますが、netstat -ano (Windows の場合) の出力を見ると、1099 を使用しているプロセスはありません。1099 を他の未使用のポートに置き換えることができます。私のクライアントプログラムは正常に接続でき、期待どおりに動作します。

しばらく検索しましたが、これは同じ問題を抱えている人に最も近いものでしたが、彼は netstat で問題のあるプロセスを見つけたようですが、私にはわかりません。

私は Netbeans で開発していますが、Netbeans を介して実行する場合でも、JAR を単独で実行する場合でも、同じ例外が発生します。彼がやっているように、コマンドプロンプトからレジストリを起動していませんが、ポート番号を変更するだけですべてがうまくいくので、それは必要ではないようです.

ここで何が欠けていますか?

サーバーコード:

import java.rmi.Naming;
import java.rmi.registry.LocateRegistry;

public class RMIServer {

    public static void main(String[] args) throws InterruptedException {
        try {
            LocateRegistry.createRegistry(1099);
            Naming.rebind("//localhost:1099/MyRemote", new MyRemote());
            System.out.println("Server ready.");
        } catch (Exception ex) {

            System.out.println("Server error:");
            ex.printStackTrace();
        }
    }
}

例外:

Server error:
java.rmi.server.ExportException: Port already in use: 1099; nested exception is: 
    java.net.BindException: Address already in use: JVM_Bind
    at sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:328)
    at sun.rmi.transport.tcp.TCPTransport.exportObject(TCPTransport.java:236)
    at sun.rmi.transport.tcp.TCPEndpoint.exportObject(TCPEndpoint.java:411)
    at sun.rmi.transport.LiveRef.exportObject(LiveRef.java:147)
    at sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:207)
    at sun.rmi.registry.RegistryImpl.setup(RegistryImpl.java:122)
    at sun.rmi.registry.RegistryImpl.<init>(RegistryImpl.java:108)
    at java.rmi.registry.LocateRegistry.createRegistry(LocateRegistry.java:203)
    at rmiserver.RMIServer.main(RMIServer.java:10)
Caused by: java.net.BindException: Address already in use: JVM_Bind
    at java.net.TwoStacksPlainSocketImpl.socketBind(Native Method)
    at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:376)
    at java.net.TwoStacksPlainSocketImpl.bind(TwoStacksPlainSocketImpl.java:101)
    at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:175)
    at java.net.ServerSocket.bind(ServerSocket.java:376)
    at java.net.ServerSocket.<init>(ServerSocket.java:237)
    at java.net.ServerSocket.<init>(ServerSocket.java:128)
    at sun.rmi.transport.proxy.RMIDirectSocketFactory.createServerSocket(RMIDirectSocketFactory.java:45)
    at sun.rmi.transport.proxy.RMIMasterSocketFactory.createServerSocket(RMIMasterSocketFactory.java:349)
    at sun.rmi.transport.tcp.TCPEndpoint.newServerSocket(TCPEndpoint.java:667)
    at sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:317)
    ... 8 more

更新: より明確にするnetstat -anp tcpために、サーバーを実行して例外を取得する直前の完全な出力を次に示します。

C:\>netstat -anp tcp

Active Connections

  Proto  Local Address          Foreign Address        State
  TCP    0.0.0.0:135            0.0.0.0:0              LISTENING
  TCP    0.0.0.0:445            0.0.0.0:0              LISTENING
  TCP    0.0.0.0:2002           0.0.0.0:0              LISTENING
  TCP    0.0.0.0:5800           0.0.0.0:0              LISTENING
  TCP    0.0.0.0:5900           0.0.0.0:0              LISTENING
  TCP    0.0.0.0:16992          0.0.0.0:0              LISTENING
  TCP    0.0.0.0:16993          0.0.0.0:0              LISTENING
  TCP    0.0.0.0:24800          0.0.0.0:0              LISTENING
  TCP    127.0.0.1:1027         127.0.0.1:24801        ESTABLISHED
  TCP    127.0.0.1:1035         127.0.0.1:2002         ESTABLISHED
  TCP    127.0.0.1:1036         0.0.0.0:0              LISTENING
  TCP    127.0.0.1:1045         127.0.0.1:24801        ESTABLISHED
  TCP    127.0.0.1:1092         0.0.0.0:0              LISTENING
  TCP    127.0.0.1:2002         127.0.0.1:1035         ESTABLISHED
  TCP    127.0.0.1:5152         0.0.0.0:0              LISTENING
  TCP    127.0.0.1:24801        0.0.0.0:0              LISTENING
  TCP    127.0.0.1:24801        127.0.0.1:1027         ESTABLISHED
  TCP    127.0.0.1:24801        127.0.0.1:1045         ESTABLISHED
  TCP    192.168.2.76:139       0.0.0.0:0              LISTENING
  TCP    192.168.2.76:1029      64.74.103.175:443      ESTABLISHED
  TCP    192.168.2.76:1038      192.168.2.220:445      ESTABLISHED
  TCP    192.168.2.76:1042      192.168.2.55:445       ESTABLISHED
  TCP    192.168.2.76:1057      74.125.225.40:443      ESTABLISHED
  TCP    192.168.2.76:1058      74.125.133.95:443      TIME_WAIT
  TCP    192.168.2.76:1060      74.125.142.125:5222    ESTABLISHED
  TCP    192.168.2.76:1063      74.125.225.47:443      ESTABLISHED
  TCP    192.168.2.76:1064      74.125.225.34:443      ESTABLISHED
  TCP    192.168.2.76:1066      74.125.225.47:443      ESTABLISHED
  TCP    192.168.2.76:1082      74.125.142.125:5222    ESTABLISHED
  TCP    192.168.2.76:1138      74.125.225.32:443      TIME_WAIT
  TCP    192.168.2.76:1139      74.125.225.32:443      TIME_WAIT
  TCP    192.168.2.76:1140      173.194.46.37:443      ESTABLISHED
  TCP    192.168.2.76:1143      91.199.212.171:80      CLOSE_WAIT
  TCP    192.168.2.76:1144      178.255.82.1:80        CLOSE_WAIT
  TCP    192.168.2.76:1150      74.125.225.32:443      TIME_WAIT
  TCP    192.168.2.76:1152      198.252.206.16:80      ESTABLISHED
  TCP    192.168.2.76:1153      198.252.206.16:80      ESTABLISHED
  TCP    192.168.2.76:24800     192.168.2.52:15713     ESTABLISHED

更新: netstat (RMI 固有ではない) に表示されずにポートが使用されているという考えについてさらに調査を行いましたが、似ているように見えるのはこれだけで、あまり役に立ちませんでした。他の誰かが以前にこの種のことに遭遇したことがありますか?

4

0 に答える 0