本帖最后由 grubby4k 于 2010-04-13 23:36:39 编辑

解决方案 »

  1.   

    你的windows配置了ipv6的协议了没?没吧?协议都没还能连上啊  朋友。你叫他们两怎么连、、、。
      

  2.   

    ipv4和ipv6要分别用两个socket监听的,
    你服务器代码只用了 InetSocketAddress 指定端口,估计只是监听了ipv4的本地端口。
      

  3.   


    serverSocket不指定地址绑定,就是会去找anyLocalAddress的,IPv4和IPv6的地址会自适应绑定的。我现在的情况是,通过抓取网络抓包,发现客户端已经向服务端发起SYN请求,只是服务端在ACK后没发送SYN而是RST请求,导致3次重试后握手失败。
      

  4.   

    (new InetSocketAddress(port))不指定地址或者主机名,JVM就会取默认的本地地址进行绑定
    JVM会通过原生函数private static native boolean isIPv6Supported()去取系统是否支持IPv6,支持的话就会绑定主机名为::,我看了下源代码大致是这样的,可就是不解,为什么建立不了TCP IPv6的连接 
     
      

  5.   

    我试了下你的代码,
    Client连接改为 new Socket("::", 5114),可以连接。
    但用tcpview看到该连接的地址是本机的ipv4地址。(系统xp,有启用ipv6)。
      

  6.   

    你是在2台机器上试验的吗?服务器端不绑定地址的话,最后也会用“::”作为anyLocalAddress的。
    可是奇怪,为什么地址和PORT都匹配上了,怎么还是IPv4的连接?