Исключение клиента grpc android io.grpc.statusruntimeexception: недоступно

У меня есть сервер GO, работающий локально на tcp://localhost:50051, и собственные модули Android / iOS.

Модуль iOS работает правильно, когда я пытаюсь использовать виртуальное устройство Android, возникает следующее исключение.

    io.grpc.StatusRuntimeException: UNAVAILABLE
                          at io.grpc.stub.ClientCalls.toStatusRuntimeException(ClientCalls.java:230)
                          at io.grpc.stub.ClientCalls.getUnchecked(ClientCalls.java:211)
                          at io.grpc.stub.ClientCalls.blockingUnaryCall(ClientCalls.java:144)
                          at 
... callig my stub method ...
                          at android.os.AsyncTask$2.call(AsyncTask.java:333)
        I/System.out:     at java.util.concurrent.FutureTask.run(FutureTask.java:266)
                          at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
                          at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
                          at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
                          at java.lang.Thread.run(Thread.java:764)
                      Caused by: java.net.ConnectException: failed to connect to localhost/127.0.0.1 (port 50051) from /:: (port 51916): connect failed: ECONNREFUSED (Connection refused)
                          at libcore.io.IoBridge.connect(IoBridge.java:138)
                          at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:129)
                          at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:356)
                          at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
                          at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
                          at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:356)
                          at java.net.Socket.connect(Socket.java:616)
                          at java.net.Socket.connect(Socket.java:565)
                          at java.net.Socket.<init>(Socket.java:445)
                          at java.net.Socket.<init>(Socket.java:248)
                          at io.grpc.okhttp.OkHttpClientTransport$1.run(OkHttpClientTransport.java:419)
                          at io.grpc.internal.SerializingExecutor$TaskRunner.run(SerializingExecutor.java:154)
                        ... 3 more
                      Caused by: android.system.ErrnoException: connect failed: ECONNREFUSED (Connection refused)
                          at libcore.io.Linux.connect(Native Method)
                          at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:126)
                          at libcore.io.IoBridge.connectErrno(IoBridge.java:152)
                          at libcore.io.IoBridge.connect(IoBridge.java:130)
                        ... 14 more

AVD работает на 10.0.2.2:8081.

0
0
1 810
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

При работе в эмуляторе Android localhost является устройством Android. Вместо этого вам нужно использовать IP / имя хоста вашего компьютера.

Так что на локальном я должен использовать свой IP inet?

Lorenzo D'Isidoro 31.10.2018 17:13

Вы можете использовать либо inet ip вашего компьютера, либо 10.0.2.2: stackoverflow.com/a/9515414/4690866

Eric Anderson 31.10.2018 21:47

Другие вопросы по теме