2013-02-27 73 views
3

我想查的請求的URL,但得到的代碼地址是無效的本地機器上的[在Windows 8僅]

java.net.ConnectException: connect: Address is invalid on local machine or port is not valid on remote machine 

這裏的狀態代碼是我的代碼

public static boolean linkExists(String URLName){ 
     URLName = "http://www.google.com"; 
     try { 
      HttpURLConnection.setFollowRedirects(false); 
      HttpURLConnection con = 
      (HttpURLConnection) new URL(URLName).openConnection(); 
      con.connect(); 
      System.out.println(con.getResponseCode()); 
      return (con.getResponseCode() == HttpURLConnection.HTTP_OK); 
     } 
     catch (Exception e) {   
      return false; 
     } 
    } 

堆棧跟蹤

java.net.ConnectException: connect: Address is invalid on local machine, or port is not valid on remote machine 
    at java.net.DualStackPlainSocketImpl.connect0(Native Method) 
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:69) 
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) 
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) 
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) 
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157) 
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391) 
    at java.net.Socket.connect(Socket.java:579) 
    at java.net.Socket.connect(Socket.java:528) 
    at sun.net.NetworkClient.doConnect(NetworkClient.java:180) 
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:378) 
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:473) 
    at sun.net.www.http.HttpClient.<init>(HttpClient.java:203) 
    at sun.net.www.http.HttpClient.New(HttpClient.java:290) 
    at sun.net.www.http.HttpClient.New(HttpClient.java:306) 
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:995) 
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:931) 
    at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:849) 
    at com.sls.lms.test.utilities.Utilities.linkExists(Utilities.java:70) 
    at com.sls.lms.test.report.ReportTest.checkReportData(ReportTest.java:70) 
    at com.sls.lms.test.report.ReportTest.CheckReportForGST(ReportTest.java:30) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) 
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) 
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309) 
    at org.junit.runner.JUnitCore.run(JUnitCore.java:160) 
    at org.junit.runner.JUnitCore.run(JUnitCore.java:138) 
    at org.testng.junit.JUnit4TestRunner.start(JUnit4TestRunner.java:81) 
    at org.testng.junit.JUnit4TestRunner.run(JUnit4TestRunner.java:69) 
    at org.testng.TestRunner$1.run(TestRunner.java:682) 
    at org.testng.TestRunner.runWorkers(TestRunner.java:1012) 
    at org.testng.TestRunner.privateRunJUnit(TestRunner.java:713) 
    at org.testng.TestRunner.run(TestRunner.java:614) 
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:334) 
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329) 
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291) 
    at org.testng.SuiteRunner.run(SuiteRunner.java:240) 
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) 
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) 
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1198) 
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1123) 
    at org.testng.TestNG.run(TestNG.java:1031) 
    at org.testng.TestNG.privateMain(TestNG.java:1338) 
    at org.testng.TestNG.main(TestNG.java:1307) 
+0

DNS的問題,我猜。你可以從控制檯ping谷歌嗎?有沒有代理,防火牆? – 2013-02-27 06:13:07

+0

平www.google.com工作正常 – coure2011 2013-02-27 06:17:47

+0

提供堆棧跟蹤,請 – 2013-02-27 06:29:04

回答

8

我相信這個問題是由Java的嘗試使用IPv6地址,當你的操作系統不支持它造成的,或者沒有正確設置來處理它。

您可以強制Java與下列財產使用的IPV4地址:

-Djava.net.preferIPv4Stack =真

+0

我使用的是Windows 8.如何強制Java在這裏?我試過同上面的代碼可以在Windows 7 – coure2011 2013-02-27 11:40:11

+1

罰款java.net.preferIPv4Stack * *應工作在所有平臺上,但是,我不是一個Windows用戶,所以我無法測試的地方 - 抱歉。 – GreyBeardedGeek 2013-02-27 14:51:01

+0

發現的命令來設置Windows上的上述財產......看到http://stackoverflow.com/questions/11850655/how-i-can-disable-ipv6-stack-use-for-ipv4-ips-on-jre – coure2011 2013-02-28 19:35:43

0

對我來說很好用Eclipse。肯定採取尼古拉的建議,並檢查是否有防火牆運行。任何我見過的關於這個例外的論壇帖子都與這種情況有關。

+0

我在sebeium測試中使用netbeans。 – coure2011 2013-02-27 06:24:57

1

有一兩件事我注意到的是,您的網址連接沒有被使用......你有沒有所謂的連接()。如果解決了您的問題,我會對錯誤消息感到失望,但在提出請求之前,您可能無法獲得響應代碼。

http://docs.oracle.com/javase/6/docs/api/java/net/URLConnection.html

+0

使用conn.connect()它拋出相同的異常 – coure2011 2013-02-27 06:37:44

0

關閉所有的Java程序,並打開上行(WINKEY + [R )或只是搜索運行,如果你有一個像我這樣的開始按鈕,並寫入-Djava.net.preferIPv4Stack=true英寸:)

0

遇到此問題,但只是關閉我的防病毒和phew它工作,這必須與防病毒阻止p沃茨。

0

我面臨同樣的問題。 我有windows8 64使用netbeans7.4。我的殺毒軟件是卡巴斯基。解決的辦法是 輪到你的防病毒或使殺毒暫停,然後運行該代碼,將工作

import java.net.*; 
import java.io.*; 

public class URLReader { 
    public static void main(String[] args) throws Exception { 

     URL oracle = new URL("http://www.oracle.com/"); 
     BufferedReader in = new BufferedReader(
     new InputStreamReader(oracle.openStream())); 

     String inputLine; 
     while ((inputLine = in.readLine()) != null) 
      System.out.println(inputLine); 
     in.close(); 
    } 
} 
0

我也面臨同樣的problem.My anitvirus是這個kaspersky.the的解決辦法是,開放kapsperksy->設置 - >防病毒保護 - > moinitored ports->選擇