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}
在win10环境QT上调试GRPC 运行时出现以下错误,网上有说明是库顺序不对通过更改后问题还是没能解决。
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
你知我知皆知 2024-07-25 04:23关注以下回答参考 皆我百晓生、券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。
这个问题是由GRPC库的URI解析和DNS解析机制引起的。GRPC使用了自定义的URI解析器,它将URI解析为一个包含多个部分的结构体,包括scheme、host、port等。
当你尝试解析一个URI时,如果这个URI不符合你的库的设计,你可能会遇到这种错误。例如,如果你的库设计中不支持非标准的主机名(如IPv6),那么当你试图解析一个以IPv6结尾的主机名时,就会触发这个错误。
解决这个问题的方法有两种:
- 修改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) { // ... }- 添加支持:如果你的应用需要处理更多类型的主机名,请确保你的应用也能处理这些主机名。你可以考虑提供一个扩展的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库进行适当的修改,并且你需要根据你的具体需求来选择合适的方案。
解决 无用评论 打赏 举报