Android Retrofit 无法通过端口 3000 连接到我的本地 Web 服务器

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/24726670/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-20 08:39:19  来源:igfitidea点击:

Retrofit cannot connect to my local web server on port 3000

androidandroid-studioretrofit

提问by kapso

My app that is using Retrofit (v1.6.1) to connect to REST web services cannot connect to my local web server (running on localhost), this is the error I am getting.

我使用 Retrofit (v1.6.1) 连接到 REST Web 服务的应用程序无法连接到我的本地 Web 服务器(在 上运行localhost),这是我收到的错误。

This is inside Nexus4 (v4.3) emulator, I am using Android Studio for development and I have added android.permission.INTERNET& android.permission.ACCESS_NETWORK_STATEpermissions in manifest file.

这是在 Nexus4 (v4.3) 模拟器中,我使用 Android Studio 进行开发,并且在清单文件中添加了android.permission.INTERNET&android.permission.ACCESS_NETWORK_STATE权限。

The error says its waited for 15s but it does not, it errors out right away.

错误说它等待了 15 秒但它没有,它立即出错。

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.access0(RestAdapter.java:220)
            at retrofit.RestAdapter$RestHandler.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.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.access0(RestAdapter.java:220)
????????????at retrofit.RestAdapter$RestHandler.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.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

回答by Mariusz Jamro

On your phone connecting to localhost:3000means "connect to port 3000 on local network interface" - which is local interface of the phone, not the port 3000 of the PC to which your phone is connected. There is nothing listening on port 3000 on the phone, so you get connection refused error.

在您的手机上连接localhost:3000意味着“连接到本地网络接口上的端口 3000” - 这是手机的本地接口,而不是手机连接到的 PC 的端口 3000。手机上的端口 3000 没有任何监听,因此您会收到连接被拒绝的错误。

Whould you're trying to do is (probably, hard to guess without more information) is to connect from the phone to port 3000 on you PC. So you should change the address you're connecting to from localhostto address of the PC. In case of emulator that would be 10.0.2.2(which is localhost of the PC). See networking informationfor reference.

你想要做的是(可能,没有更多信息就很难猜测)是从手机连接到你电脑上的端口 3000。因此,您应该将要连接的地址更改localhost为 PC 的地址。在模拟器的情况下,这将是10.0.2.2(这是 PC 的本地主机)。请参阅网络信息以供参考。

回答by kapso

I solved the issue, need to use 10.0.2.2instead of localhostto connect to my local server.

我解决了这个问题,需要使用10.0.2.2而不是localhost连接到我的本地服务器。

Found it here - http://developer.android.com/tools/devices/emulator.html#networkaddresses

在这里找到 - http://developer.android.com/tools/devices/emulator.html#networkaddresses