【问题标题】:Creating a Client Socket in java with remote address is in Inet4Address format and bind address is in Inet6Address format使用远程地址在 java 中创建客户端套接字为 Inet4Address 格式,绑定地址为 Inet6Address 格式
【发布时间】:2013-10-09 13:23:27
【问题描述】:

如下创建一个ClientSocket程序:

    String remote_host = "10.0.0.1";
    int remote_port = 9990;
    InetAddress address = InetAddress.getByName(remote_host);//It gets a Inet4Address
    String bindhost="facade";
    InetAddress bindaddress = InetAddress.getByName(bindhost);//It gets a Inet6Address   as Ipv6 address is configured for hostname "facade" in /etc/hosts
    socket = new Socket(address, remote_port,bindaddress,9787);

获取异常如下:

java.net.SocketException: Network is unreachable
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
    at java.net.Socket.connect(Socket.java:529)
    at java.net.Socket.connect(Socket.java:478)
    at java.net.Socket.<init>(Socket.java:375)
    at java.net.Socket.<init>(Socket.java:276)
    at Client.main(Client.java:25)

我们可以按照上面的方式创建socket吗???

使用类似的方式尝试了 ssh 协议。得到相同的错误: [root@mysystem ~]# ssh -6 -b 门面 root@10.0.0.1 ssh:连接到主机 10.0.0.1 的 22 端口:网络不可达

//facade在/etc/hosts中配置了ipv6地址

【问题讨论】:

  • 您无法通过 IPv6 连接到 IPv4 地址。

标签: sockets ipv6


【解决方案1】:

删除“new Socket(...)”的最后两个参数。您无需指定本地地址或端口。 TCP 会为您找到两者。

【讨论】:

  • 在我的情况下,我需要使用本地地址和端口。我们将模块部署在多个节点上。在任何时间点,都会在这些节点中的任何一个上创建一个虚拟 IP,并且应该连接到外部系统从这个本地 ip 和端口(虚拟 ip)开始
猜你喜欢
  • 2014-03-05
  • 1970-01-01
  • 1970-01-01
  • 2017-01-17
  • 2017-04-27
  • 1970-01-01
  • 2010-10-10
  • 2012-06-15
相关资源
最近更新 更多