Flutter gRPC错误-操作系统错误:连接被拒绝

时间:2018-08-06 11:18:16

标签: dart flutter protocol-buffers grpc

我正在使用protobuf和gRPC在Flutter应用程序和python服务器(Flutter中的客户端和python中的服务器)之间交换信息。服务器在0.0.0.0上运行,并且客户端使用服务器计算机的IP地址。

import 'dart:async';
import 'User.pbgrpc.dart';
import 'User.pb.dart';
import 'package:grpc/grpc.dart';

Future<Null> main() async {
  final channel = new ClientChannel('IP_ADDRESS',
      port: 50051,
      options: const ChannelOptions(
          credentials: const ChannelCredentials.insecure()));
  final stub = new StorageClient(channel);

  Test input = new Test();
  input.id = 1;
  try {
    var response = await stub.getPerson(input);
    print('Greeter client received: ${response}');
  } catch (e) {
    print('Caught error: $e');
  }
  await channel.shutdown();
}

如果我使用dart client.dart运行此客户端,则一切正常,并且得到了预期的响应。但是,如果我将此方法嵌入到类似flutter的应用程序中,则:

@override
Widget build(BuildContext context) {

Future<Null> testRPC() async {
  final channel = new ClientChannel('IP_ADDRESS',
      port: 50051,
      options: const ChannelOptions(
          credentials: const ChannelCredentials.insecure()));
  final stub = new StorageClient(channel);

  Test input = new Test();
  input.id = 1;
  try {
    var response = await stub.getPerson(input);
    print('Greeter client received: ${response}');
  } catch (e) {
    print('Caught error: $e');
  }
  await channel.shutdown();
}

testRPC();
...etc
}

我得到:

I/flutter (18824): Caught error: gRPC Error (14, Error connecting: SocketException: OS Error: No route to host, errno = 111, address = localhost, port = 45638)

更新:当我使用仿真器运行应用程序时,它可以正常工作。因此,这仅在使用真实设备时才会发生。

2 个答案:

答案 0 :(得分:0)

这是防火墙问题。在服务器上运行systemctl stop firewalld可以解决问题。

答案 1 :(得分:0)

如果在同一台计算机上运行AVD(Client)和后端,则必须将基本URL(而不是将“ localhost / 127.0.0.1”)设置为“ 10.0.2.2”。

这是Github中的答案。