Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.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
使用eclipse(windows)在java中使用IPv6地址和端口号创建套接字_Java_Sockets_Ipv6 - Fatal编程技术网

使用eclipse(windows)在java中使用IPv6地址和端口号创建套接字

使用eclipse(windows)在java中使用IPv6地址和端口号创建套接字,java,sockets,ipv6,Java,Sockets,Ipv6,当我尝试使用IPv4地址创建套接字时,它是成功的,但当我尝试使用IPv6地址和端口号创建套接字时,它会引发异常: java.net.SocketException: Network is unreachable: connect at java.net.DualStackPlainSocketImpl.connect0(Native Method) at java.net.DualStackPlainSocketImpl.socketConnect(Unk

当我尝试使用IPv4地址创建套接字时,它是成功的,但当我尝试使用IPv6地址和端口号创建套接字时,它会引发异常:

java.net.SocketException: Network is unreachable: connect
          at java.net.DualStackPlainSocketImpl.connect0(Native Method)
          at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
          at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
          at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
          at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
          at java.net.PlainSocketImpl.connect(Unknown Source)
          at java.net.SocksSocketImpl.connect(Unknown Source)
          at java.net.Socket.connect(Unknown Source)
          at java.net.Socket.connect(Unknown Source)
          at java.net.Socket.<init>(Unknown Source)
          at java.net.Socket.<init>(Unknown Source)
          at epcs.intf.be.SimConnectionHandler.connect(SimConnectionHandler.java:332)
          at epcs.intf.be.BackEndConnection.connect(BackEndConnection.java:42)
          at epcs.intf.be.ProcedureRunner.runScenario(ProcedureRunner.java:230)
          at epcs.exec.Runner.SendExecTrigger(Runner.java:418)
          at epcs.exec.Runner.sendCommand(Runner.java:454)
          at epcs.main.ExecutionThread$TaskStartTestCaseExecution.run(ExecutionThread.java:98)
          at epcs.main.ExecutionThread.run(ExecutionThread.java:29)

通常,此错误意味着远程计算机的V6地址实际上没有绑定到给定端口。例如,如果您可以通过端口80上的IPV4与web服务器通信,并不意味着它实际上将本地V6地址绑定到端口。您仍然可以ping机器,但ping实际上不会告诉您端口是否绑定

要证明您使用插座的方式是正确的,快速测试如下:

在Eclipse Windows计算机上

  • 在命令提示符下执行netstat-ptcpv6-a
  • 选择一个localhost“:”条目。在本例中,我的机器将返回[:]:135作为当前绑定V6的端口之一
  • 尝试在Eclipse中连接:

    public static void main(String[] args) {
      try
      {
        InetAddress address = InetAddress.getByName("::");
        Socket socket = new Socket(address, 135);
        // Should of connected with no exception thrown since we know this port was listening in netstat
    
      }
      catch (Throwable t) {
        t.printStackTrace();
      }
    }
    
    我知道上述内容对您当前的代码没有帮助,但它更旨在隔离IPV6地址和端口未绑定以及套接字连接异常有效的可能性


    我做的另一个测试是,我获取了Linux机器的Inet6地址,并确保SSH正在该端口上侦听。然后,我使用了上面来自Windows eclipse的相同代码,并针对我的Linux Inet6地址和端口22执行了套接字。这也很有效。我的本地tomcat失败,因为它未设置为在Inet6上侦听。

    该IP地址可访问吗?服务器应用程序是否正确绑定到它?Windows计算机是否安装并启用了IPv6?我不确定这是否相关,但您是否使用java 7?我知道JDK中存在一个bug,它可能会导致windows机器上IPv6的套接字问题。我甚至可以在Linux上运行相同的代码,但引发的异常是java.net.ConnectException:java.net.PlainSocketImpl.socketConnect(本机方法)的连接被拒绝,java.net.PlainSocketImpl.doConnect(未知源代码)java.net.socksocketimpl.connectToAddress(未知源)java.net.PlainSocketImpl.connect(未知源)java.net.sockssockettimpl.connect(未知源)java.net.Socket.connect(未知源)java.net.Socket.connect(未知源)java.net.Socket.connect(未知源)epcs.intf.be.SimConnectionHandler.conect(SimConnectionHandler.java:332我可以使用相同的Ipv6地址ping系统,但在套接字创建过程中会引发异常。
    public static void main(String[] args) {
      try
      {
        InetAddress address = InetAddress.getByName("::");
        Socket socket = new Socket(address, 135);
        // Should of connected with no exception thrown since we know this port was listening in netstat
    
      }
      catch (Throwable t) {
        t.printStackTrace();
      }
    }