Java RMI,在创建注册表时已经使用的端口

时间:2013-05-22 17:54:30

标签: java tcp port rmi netbeans-7

在Java工作了很多年后,我第一次在RMI中弄湿了,而且我正在按照this教程来了解基础知识。下面的服务器代码给出了以下异常,说端口1099已经在使用,但是查看netstat -ano的输出(在Windows上),没有进程正在使用1099.我可以用任何其他未使用的端口替换1099并且它按预期工作,我的客户端程序能够成功连接。

我搜索了一会儿,this是我遇到同样问题的人最接近的事情,但他似乎找到了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)的想法的研究,但是this是唯一看似相似的东西,并且它不是很有用。还有其他人以前遇到过这类事吗?

0 个答案:

没有答案