我们的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。
这是一篇关于互操作性的好文章:
您知道如何为您的Java应用程序“关闭” IPV6: -Djava.net.preferIPv4Stack=true
您还可以像这样强制服务器使用IPV6: echo 0 > /proc/sys/net/ipv6/bindv6only
可以说这是您的最佳来源:
除非受到外部网络问题的限制,否则您应该绝对能够完成所需的工作(至少在Java编程级别)。
Nodes) V4 Only V4/V6 V6 Only
------- ----- -------
V4 Only x x
V4/V6 x x x
V6 Only x x
PS:
这里还有一个很好的链接,它解释了套接字级别发生的情况。它不是Java(它是C),但实际上适用了示例原则:
我们的一个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