Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 同一端口上有两个RMIRegistry.exe?_Sockets_Rmi_Java 7_Java 6_Rmiregistry - Fatal编程技术网

Sockets 同一端口上有两个RMIRegistry.exe?

Sockets 同一端口上有两个RMIRegistry.exe?,sockets,rmi,java-7,java-6,rmiregistry,Sockets,Rmi,Java 7,Java 6,Rmiregistry,我正在使用Windows7(Professional,64位)系统,我已经看到了当前的情况,有人能给我介绍一下并解释一下这是怎么可能的吗?我已经安装了Java 6(仅限JRE)和Java 7(JDK),它们都是64位的 在命令提示符下,我从jre6/bin目录运行rmiregistry.exe(默认端口1099)。当该命令正在运行时,我尝试从另一个命令提示符再次运行它。它返回一个异常,表示端口已绑定 同样,对于jdk7/bin目录中的rmiregistry.exe。相同的异常,已绑定 在命令提示

我正在使用Windows7(Professional,64位)系统,我已经看到了当前的情况,有人能给我介绍一下并解释一下这是怎么可能的吗?我已经安装了Java 6(仅限JRE)和Java 7(JDK),它们都是64位的

  • 在命令提示符下,我从
    jre6/bin
    目录运行
    rmiregistry.exe
    (默认端口1099)。当该命令正在运行时,我尝试从另一个命令提示符再次运行它。它返回一个异常,表示端口已绑定

  • 同样,对于
    jdk7/bin
    目录中的
    rmiregistry.exe
    。相同的异常,已绑定

  • 在命令提示符下,我从
    jre6/bin
    目录运行
    rmiregistry.exe
    (默认端口1099)。当该端口正在运行时,我尝试从另一个命令提示符从
    jdk7/bin
    目录运行
    rmiregistry.exe
    (默认端口1099)。 它跑了!查看和
    netstat-a-b-o
    结果,两个PID都在侦听IPv4和IPv6上的端口1009。第一个要运行的是对RMI操作和API的回复

  • 怎么可能呢?两个注册中心如何监听端口1099?我错过什么了吗

    谢谢你的帮助


    详情如下:

    • 运行Java 6 RMI注册表时,异常堆栈跟踪返回到由以下原因引起的
      :Java.net.BindException:地址已在使用:JVM_Bind
      ,来自
      Java.net.PlainSocketImpl.socketBind(本机方法)
    • 相反,运行Java7RMI注册表时,异常stacktrace来自
      Java.net.DualStackPlainSocketImpl.bind0(本机方法)
    有什么意义吗?这与
    -Djava.net.preferIPv4Stack=true
    VM选项有关吗?我如何从Java 7知道IPv4和IPv6 RMI端口是否已被Java 6或Java 7 RMI注册表中的任何一个占用


    再一次,更多细节

    • 我已经停止了一切。只是为了好玩,我在端口1099上运行了Calibre(电子书管理应用程序)内部web服务器

    • 来自Java 6的
      rmiregistry.exe
      ,它告诉我它无法运行,因为端口正忙

    • rmiregistry.exe
      从Java 7运行。。。但是,与以前一样,1099端口上的回复来自Calibre


    还有一点:在Ubuntu(使用OpenJDK)上运行相同的两个RMI注册中心(Java 6+Java 7,32位),我通过
    Java.net.PlainSocketImpl.socketBind(本机方法)
    (即使对于Java 7!)获得了“端口已在使用”消息。没有两个东西可以占用同一个端口。。。像往常一样!所以,至少,我知道这是Windows7+Java的问题

    还有什么提示吗


    我在DatagramSocket中看到了类似的情况:我在Java 6的一个端口上使用它,然后我用Java 7运行另一个相同的应用程序,它连接到该端口(但不工作),即使它已经被使用。然后,使用Java7启动第三个相同的应用程序,这个应用程序会意识到这样的端口已经很忙了。我认为这可能与RMI注册表相同


    为什么我可以在同一个端口上运行两个RMI注册表?为什么Java6和Java7在某些方面对套接字和端口有“冲突”行为?另外,为什么Windows(7,在我的情况下)不阻止同一端口上的第二个请求?

    您如何知道哪一个正在响应绑定和查找?因为当我终止第二个(通过任务管理器)时,一切都继续工作,而如果我终止第一个,一切都停止。“其他一切”是否包括新的绑定和查找?因为正常的RMI通信根本不通过注册表。实际上,我的应用程序监视绑定到注册表的资源列表:当注册表为空或显然不可用时,它会关闭。这就是为什么我理解了哪个rmiregistry.exe实际上涉及其中。天哪。。。没有人能回答我?