1. 程式人生 > >成功解決Address is invalid on local machine, or port is not valid on remote machine

成功解決Address is invalid on local machine, or port is not valid on remote machine

解決編寫Ftp伺服器遇到java.net.ConnectException: connect: Address is invalid on local machine, or port is not valid on remote machine

問題描述

Socket dataSocket = new Socket(remoteHost,remotePort,InetAddress.getLocalHost(),20);

在學習編寫Ftp伺服器的時候,上述程式碼遇到了使用Socket連線20埠時報錯,百度網上各種方法都不能解決。包括修改埠號,修改JVM引數,以及在主函式中增加
System.setProperty(“java.net.preferIPv4Stack”, “true”);都無法解決問題

原因所在

經過三天的查詢終於找到原因,希望自己以後不會再犯這樣的錯誤。
首先看看InetAddress.getLocalHost()的列印結果

可以看到主機ip為192.168.93.6,在cmd裡面用ipconfig檢視ip
在這裡插入圖片描述
問題就出在這裡了,InetAddress.getLocalHost()獲得的是乙太網ip,而我自己使用的是WLAN。所以造成本地機器上的地址無效,修改程式碼。

Socket dataSocket = new Socket(remoteHost,remotePort,InetAddress.getByName("127.0.0.1"),20);

問題成功解決。