java.net.SocketException: Permission denied: connect异常解决

Permission denied: connect executing GET http://spring-cloud-producer/hello?name=xxx] with root cause
java.net.SocketException: Permission denied: connect
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)

问题 – 解决

在使用SpringCloud的Restful风格服务调用 Feign 搭建时,调用服务提供者的服务时出现了上面的异常,一开始的是JDK1.8,在网上看到的解决方案:给JVM的启动参数增加-Djava.net.preferIPv4Stack=true参数,然后问题解决了,皆大欢喜,撒花……

问题重现

然后,JDK升级到10后发现,这错误又出来了,好吧,继续百度,Google,毕竟是屌丝程序员的拿手手段,然而看了一圈后发现,还是没有一个合适的答案,囧

找到问题所在

最后没办法只能靠自己,然后开始调试代码,发现调用服务的时候注册中心给的竟然是计算机名,在通过计算机名去找IP,然后问题就在这里,我本机有多个网络链接(VPN呐,虚拟机的虚拟网卡呐,WIFI网卡呐,balabala),但是我只能拿一个IP啊,咋办?

解决

重点来了,敲黑板

这时候只需要设置网络优先级即可解决问题,怎么设置呢,以windows10为例:
网络优先级设置

如上图,设置网络的接口跳跃点数,其实就是优先级,值越小,优先级越高。(原本我的VPN开启的时候给vpn的网络链接跳跃值的设置成1了)
设置完后保存,再调试,发现取到了我设置了跳跃点为1的IP,至此,问题彻底解决了,即使不加-Djava.net.preferIPv4Stack=true参数,也不会报错了,我估计是设置了ipv4最高优先级,原本默认取ipv6模块的也被往后排了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章