2014-07-13 9 views
20

Moja aplikacja korzystająca z funkcji Retrofit (v1.6.1) do łączenia się z usługami sieciowymi REST nie może połączyć się z moim lokalnym serwerem WWW (działającym pod numerem localhost), jest to błąd uzyskiwanie.Retrofit nie może połączyć się z moim lokalnym serwerem WWW na porcie 3000

Jest wewnątrz Nexus4 (v4.3) emulatora używam Android Studio dla rozwoju i dodałem android.permission.INTERNET & android.permission.ACCESS_NETWORK_STATE uprawnienia w pliku manifestu.

Błąd mówi, że czekał na 15 sekund, ale tak się nie stało, od razu wystąpił błąd.

07-13 15:57:53.947  820-840/it.test.android.app.activity D/Retrofit﹕ ---> HTTP POST http://localhost:3000/app/auth/signin 
07-13 15:57:54.132  820-840/it.test.android.app.activity D/Retrofit﹕ Content-Type: application/json; charset=UTF-8 
07-13 15:57:54.132  820-840/it.test.android.app.activity D/Retrofit﹕ Content-Length: 44 
07-13 15:57:54.157  820-840/it.test.android.app.activity D/Retrofit﹕ {"auth":{"email":"steve","password":"pass"}} 
07-13 15:57:54.387  820-840/it.test.android.app.activity D/Retrofit﹕ ---> END HTTP (44-byte body) 
07-13 15:57:54.657  820-840/it.test.android.app.activity D/Retrofit﹕ ---- ERROR http://localhost:3000/app/auth/signin 
07-13 15:57:54.857  820-840/it.test.android.app.activity D/Retrofit﹕ java.net.ConnectException: failed to connect to localhost/127.0.0.1 (port 3000) after 15000ms: isConnected failed: ECONNREFUSED (Connection refused) 
      at libcore.io.IoBridge.isConnected(IoBridge.java:223) 
      at libcore.io.IoBridge.connectErrno(IoBridge.java:161) 
      at libcore.io.IoBridge.connect(IoBridge.java:112) 
      at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192) 
      at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459) 
      at java.net.Socket.connect(Socket.java:842) 
      at libcore.net.http.HttpConnection.<init>(HttpConnection.java:76) 
      at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50) 
      at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340) 
      at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87) 
      at libcore.net.http.HttpConnection.connect(HttpConnection.java:128) 
      at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316) 
      at libcore.net.http.HttpEngine.connect(HttpEngine.java:311) 
      at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290) 
      at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240) 
      at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:81) 
      at libcore.net.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:197) 
      at retrofit.client.UrlConnectionClient.prepareRequest(UrlConnectionClient.java:68) 
      at retrofit.client.UrlConnectionClient.execute(UrlConnectionClient.java:37) 
      at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:321) 
      at retrofit.RestAdapter$RestHandler.access$100(RestAdapter.java:220) 
      at retrofit.RestAdapter$RestHandler$2.obtainResponse(RestAdapter.java:278) 
      at retrofit.CallbackRunnable.run(CallbackRunnable.java:42) 
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
      at retrofit.Platform$Android$2$1.run(Platform.java:142) 
      at java.lang.Thread.run(Thread.java:841) 
    Caused by: libcore.io.ErrnoException: isConnected failed: ECONNREFUSED (Connection refused) 
      at libcore.io.IoBridge.isConnected(IoBridge.java:208) 
            at libcore.io.IoBridge.connectErrno(IoBridge.java:161) 
            at libcore.io.IoBridge.connect(IoBridge.java:112) 
            at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192) 
            at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459) 
            at java.net.Socket.connect(Socket.java:842) 
            at libcore.net.http.HttpConnection.<init>(HttpConnection.java:76) 
            at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50) 
            at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340) 
            at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87) 
            at libcore.net.http.HttpConnection.connect(HttpConnection.java:128) 
            at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316) 
            at libcore.net.http.HttpEngine.connect(HttpEngine.java:311) 
            at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290) 
            at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240) 
            at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:81) 
            at libcore.net.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:197) 
            at retrofit.client.UrlConnectionClient.prepareRequest(UrlConnectionClient.java:68) 
            at retrofit.client.UrlConnectionClient.execute(UrlConnectionClient.java:37) 
            at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:321) 
            at retrofit.RestAdapter$RestHandler.access$100(RestAdapter.java:220) 
            at retrofit.RestAdapter$RestHandler$2.obtainResponse(RestAdapter.java:278) 
            at retrofit.CallbackRunnable.run(CallbackRunnable.java:42) 
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
            at retrofit.Platform$Android$2$1.run(Platform.java:142) 
            at java.lang.Thread.run(Thread.java:841) 
07-13 15:57:54.857  820-840/it.test.android.app.activity D/Retrofit﹕ ---- END ERROR 
+0

** Zobacz ten link, dałem odpowiedź tutaj **: [wprowadź opis link tutaj] (https://stackoverflow.com/questions/31623872/failed-to-connect- to-localhost-127-0-0-1-android/45127553 # 45127553) –

Odpowiedz

20

Rozwiązałem problem, potrzebuję użyć 10.0.2.2 zamiast localhost, aby połączyć się z moim lokalnym serwerem.

Znaleziono go tutaj - http://developer.android.com/tools/devices/emulator.html#networkaddresses

+6

Należy zauważyć, że odpowiedź z @Marek_Jamro odpowiada właśnie na to i przyszła wcześniej niż twoja. To powinna być właściwa odpowiedź. – XAnguera

+0

Zgadzam się z @XAnguera w tym sensie, że odpowiedź Mariusz_Jamro opisuje, jak port 3000 nie ma nic wspólnego z jego problemem. jednak mógł być bardziej wyraźny i stwierdzając, że jego telefon i komputer mają dwa różne adresy IP w tej samej podsieci (routerze). – greenhouse

36

Na telefonie łączącym do localhost:3000 oznacza „łączyć się z portem 3000 na lokalny interfejs sieciowy” - czyli lokalny interfejs telefonu, a nie port 3000 na komputerze, do którego jest podłączony telefon. Nie ma nic nasłuchującego na porcie 3000 w telefonie, więc otrzymasz błąd odmowy połączenia.

Próbujesz zrobić (prawdopodobnie trudno zgadnąć bez dodatkowych informacji), aby połączyć się z telefonu do portu 3000 na twoim komputerze. Dlatego powinieneś zmienić adres, z którym łączysz się z adresu localhost na adres komputera. W przypadku emulatora będzie to 10.0.2.2 (który jest hostem lokalnym komputera). See networking information w celach informacyjnych.

Powiązane problemy