协议族不支持地址族 - 特定计算机上的SocketException

20
在我编写的一个应用程序中,有一台特定的计算机出现了java.net.SocketException

java.net.SocketException:连接不支持的地址类型(Address family not supported by protocol family: connect)

这台电脑运行着Windows 7 32位操作系统,并通过本地连接(以太网)接入互联网。该应用程序在其他电脑上正常运行,包括使用本地连接或Wi-Fi连接的Windows 7和Windows 8电脑,因此我并不确定问题出在程序上。 我尝试检查本地连接的协议,但没有发现任何问题。 请问有人能帮忙理解问题所在吗?为什么会抛出这个异常?

尝试使用任何网络数据包监控软件,如Wireshark。 - prasanth
我需要在那里看到什么? - Or B
我的过滤器一定要是“portmap.port == 80”吗? - Or B
它声称: 头校验和:0x0000 [不正确,应为0x15ff(可能是由于“IP校验和卸载”引起的)] - Or B
我不是很理解... 我在这里看到(http://wiki.wireshark.org/CaptureSetup/Offloading)以下说明: 在Windows中,转到控制面板->网络和Internet连接->网络连接,右键单击要更改的连接并选择“属性”。按“配置...”按钮,选择“高级”选项卡以查看或修改“卸载传输TCP校验和”和“卸载接收TCP校验和”值。我找到了这个,但我不知道这些设置的期望值是什么。 - Or B
显示剩余6条评论
6个回答

40

尝试检查计算机上是否安装了名为“RelevantKnowledge”的间谍程序。卸载该程序有助于解决问题。


这可能真的是问题所在。 - Or B
3
我注意到另一种名为“PremierOpinion”的恶意软件存在同样的问题。 - Emmanuel Bourg
我不知道这个“RelevantKnowledge”是从哪里来的,但当我尝试这个答案时,它有效。谢谢。 - Titus Sutio Fanpula

26

对于我来说,Java选项-Djava.net.preferIPv4Stack=true起了作用。


20
  1. 打开命令提示符(Windows开始菜单,搜索cmd)
  2. 点击命令提示符左上角,点击属性,启用快速编辑模式
  3. 复制:setx _JAVA_OPTIONS -Djava.net.preferIPv4Stack=true

  4. 在命令提示符上右键单击,应该会出现粘贴选项

  5. 按回车键。就这么简单!

我将它添加到了Azure门户中的“应用程序设置”中,然后它就可以工作了! - lionello

5
可能是以下几个原因之一:
  • 防病毒软件阻止了连接。如果您在该计算机上运行了防病毒软件,请尝试禁用它以进行测试。
  • Java 7尝试使用IPv6连接:如果在能够正常工作的计算机上安装的是Java 6,而在无法连接的计算机上安装的是Java 7,则尝试在无法连接的计算机上禁用Java中的IPv6(请参考此帖子中的说明)

它使用与我的计算机相同的反病毒软件,并运行最新版本的Java 7。请查看我的问题评论。 - Or B
请参阅有关在Java 7中禁用IPv6的项目符号。 - Christian Garbin
不,所有电脑都是Java 7。 - Or B
可能值得尝试在该计算机上禁用IPv6进行测试。这样至少可以将其排除在可能的罪犯列表之外。 - Christian Garbin

0

谢谢,这对我很有帮助:

防病毒软件阻止了连接。如果您在该计算机上运行了防病毒软件,请尝试禁用它进行测试。

打开命令提示符(Windows开始按钮,输入cmd进行搜索) 单击命令提示符的左上角,单击属性,启用快速编辑模式 复制:setx _JAVA_OPTIONS -Djava.net.preferIPv4Stack=true 右键单击命令提示符,应该会粘贴 按回车键。就这么简单!


0
如果您正在使用Java 6,请尝试切换到Java 7。这对我很有效。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接