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模塊的也被往後排了。

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