clj578 2020-10-15 09:14 采纳率: 0%
浏览 83

在win10环境QT上调试GRPC 运行时出现以下错误,网上有说明是库顺序不对通过更改后问题还是没能解决。

E1015 09:09:26.348000000 2176 uri_parser.cc:46] bad uri.scheme: '192.168.128.252:12345'
E1015 09:09:26.352000000 2176 uri_parser.cc:52] ^ here
E1015 09:09:26.354000000 2176 resolver_registry.cc:80] don't know how to resolve '192.168.128.252:12345' or 'dns:///192.168.128.252:12345'
E1015 09:09:26.360000000 2176 resolver_registry.cc:80] don't know how to resolve 'dns:///192.168.128.252:12345' or 'dns:///dns:///192.168.128.252:12345'
E1015 09:09:26.365000000 2176 channel.cc:83] channel stack builder failed: {"created":"@1602724166.365000000","description":"the target uri is not valid.","file":"g:\grpc_program\grpc\src\core\ext\filters\client_channel\client_channel.cc","file_line":1483}

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-07-25 04:23
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    这个问题是由GRPC库的URI解析和DNS解析机制引起的。GRPC使用了自定义的URI解析器,它将URI解析为一个包含多个部分的结构体,包括scheme、host、port等。

    当你尝试解析一个URI时,如果这个URI不符合你的库的设计,你可能会遇到这种错误。例如,如果你的库设计中不支持非标准的主机名(如IPv6),那么当你试图解析一个以IPv6结尾的主机名时,就会触发这个错误。

    解决这个问题的方法有两种:

    1. 修改URI解析器:你可以考虑修改GRPC的URI解析器,使其能够处理更多的主机名格式。这可能涉及到修改源码或构建工具的配置文件。
    #include <grpc/support/port_platform.h>
    #include <grpc/support/string_util.h>
    
    // ...
    
    void ParseHostPort(const char* host, grpc_core::StringPiece port,
                        grpc_uri::UriParser* parser) {
      // ...
    }
    
    1. 添加支持:如果你的应用需要处理更多类型的主机名,请确保你的应用也能处理这些主机名。你可以考虑提供一个扩展的URI解析器或者修改现有的URI解析器以支持新的格式。
    class CustomUriParser : public grpc_core::UriParser {
    public:
      void ParseHostPort(const char* host, grpc_core::StringPiece port,
                          grpc_uri::UriParser* parser) override {
        // ...
      }
    };
    
    // ...
    
    std::unique_ptr<grpc_core::UriParser> custom_parser;
    if (custom_parser) {
      custom_parser->ParseHostPort(host, port, this);
    } else {
      GRPC_ERRORwithCode(grpc_core::Status::INVALID_ARGUMENT,
                         "Unsupported URI scheme");
    }
    

    请注意,上述解决方案都需要对GRPC库进行适当的修改,并且你需要根据你的具体需求来选择合适的方案。

    评论

报告相同问题?