当前位置: 首页 > 面试题库 >

如何在Java上同时支持IPv4和IPv6

龚德本
2023-03-14
问题内容

我们的Java程序之一在启动时仅监听IPv6(8080)

例如

# netstat -ntpl

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -               
tcp6       0      0 :::8080                 :::*                    LISTEN      -               
tcp6       0      0 :::22                   :::*                    LISTEN      -

问题是无法从外部访问(本地主机除外),要解决此问题,我需要手动添加

-Djava.net.preferIPv4Stack=true

但这使得该程序仅适用于IPv4网络。

是否可以执行上述类似 sshd的 操作,并且都支持IPv4和IPv6?


问题答案:

我怀疑这不是Java编程问题,而是OS网络堆栈/ OS网络配置问题:

http://coding.derkeiler.com/Archive/Java/comp.lang.java.help/2009-09/msg00087.html

在某些操作系统上,单个本机TCP套接字可以同时侦听IPv4和IPv6上的端口。它能够接受来自远程IPv4和远程IPv6客户端的连接。在其他操作系统(例如WinXP)上,操作系统本机套接字无法执行此操作,但只能从IPv4或IPv6接受,不能同时接受。在这些OS上,必须具有两个侦听套接字才能接收来自远程IPv4和IPv6客户端的连接,一个套接字侦听IPv4连接,一个套接字侦听IPv6。

Windows 7和Windows Server 2008可以很好地处理双堆栈。Windows XP没有那么多:)

您似乎在Linux上-大多数现代Linux台式机和服务器也可以毫无问题地处理双ipv4 ipv6。

这是一篇关于互操作性的好文章:

  • http://ntrg.cs.tcd.ie/undergrad/4ba2.02/ipv6/interop.html

您知道如何为您的Java应用程序“关闭” IPV6: -Djava.net.preferIPv4Stack=true

您还可以像这样强制服务器使用IPV6: echo 0 > /proc/sys/net/ipv6/bindv6only

可以说这是您的最佳来源:

  • http://docs.oracle.com/javase/6/docs/technotes/guides/net/ipv6_guide/index.html

除非受到外部网络问题的限制,否则您应该绝对能够完成所需的工作(至少在Java编程级别)。

Nodes)      V4 Only  V4/V6  V6 Only
            -------  -----  -------
V4 Only     x        x   
V4/V6       x        x      x
V6 Only              x      x

PS:

这里还有一个很好的链接,它解释了套接字级别发生的情况。它不是Java(它是C),但实际上适用了示例原则:

  • 接受来自IPv6和IPv4客户端的连接


 类似资料:
  • 我们的一个Java程序启动时,它只监听IPv6(8080) 例如。 问题是它不能从外部访问(除了localhost之外),为了解决这个问题,我手动添加了这个 是否可以像上面的sshd一样,同时支持IPv4和IPv6?

  • 在Java web应用程序的根目录中有以下两个servlet和一个index.html页面。html页面收集一些数据,使用Insert servlet插入数据,然后向用户提供一个URL来检索数据(即http://localhost:8080/12345)。我希望用户能够将http://localhost:8080/12345放在浏览器中,并调用Retrieve servlet。 现在发生的事情是,

  • 我在多台PC上有多个版本的,其中一些具有最新版本,即,有些具有较旧的版本。 我已经按照这个设置与,下一代支持Firefox 47版自动化如下:- 它在Firefox版本47上运行良好,但当我在安装Firefox旧版本的其他PC上运行相同时,它会给出如下:- 原因:org.openqa.selenium.remote。无法访问BrowserException:无法sta rt新会话。可能的原因是远程

  • 注意:“”表示我要在两个地址上侦听客户端。 server.py client.py

  • 我对第二行的解释是“某人”(操作系统?Flask所依赖的底层网络库?)正在将IPv4请求转换为IPv6请求。但是,我理解,在传统的双堆栈设置中“本机”支持IPv4并不相同,即我希望有某种链接(这是我运行应用程序()时得到的结果)

  • 本文向大家介绍Java实现上传和下载功能(支持多个文件同时上传),包括了Java实现上传和下载功能(支持多个文件同时上传)的使用技巧和注意事项,需要的朋友参考一下 文件上传一直是Web项目中必不可少的一项功能。 项目结构如下:(这是我之前创建的SSM整合的框架项目,在这上面添加文件上传与下载) 主要的是FileUploadController,doupload.jsp,up.jsp,springm