【问题标题】:grpc's ServerBuilder::AddListeningPort() always returns TCP port zerogrpc 的 ServerBuilder::AddListeningPort() 总是返回 TCP 端口零
【发布时间】:2020-01-14 10:37:41
【问题描述】:

我在通过 vcpkg 安装的 Windows 10、VS2019、64 位 grpc v1.23.1-1 上。

使用 grpc 的 ServerBuilder 类。从the examples provided 开始,服务器代码应该类似于:

const std::string server_address = "0.0.0.0:12345";
int tcp_port;
grpc::ServerBuilder builder;
builder.AddListeningPort(server_address, grpc::InsecureServerCredentials(), &tcp_port);
builder.RegisterService(&myservice);
auto server(builder.BuildAndStart());
std::cout << "port=" << tcp_port << std::endl;
server->Wait();

无论我尝试对server_address 使用什么,生成的tcp_port 始终为零,调用 netstat 查看所有侦听端口确认我的应用程序没有在任何地方侦听。

AddListeningPort() API 记录在 here

到目前为止我尝试过的地址示例:

[::1]:54321
dns:///[::1]43210
dns:///::1:
::1
::1:
0.0.0.0:12345
localhost
localhost:7525
127.0.0.1
127.0.0.1:9876

(我已经尝试了几十个随机端口号,而不仅仅是这里的那些,netstat 确认我没有任何东西绑定到这些端口。)

有什么方法可以从 grpc 获取更多信息?在 grpc::Servergrpc::ServerBuilder 中似乎没有任何 API 可以调用来获取错误代码、状态消息等。


编辑: 对于将来在谷歌上搜索与 grpc 相关的内容的人,我编辑了示例代码以将std::cout 行进一步向下移动,因为该端口在调用BuildAndStart() 之后才有效(感谢@Botje。)

还确定了为什么 Windows 上的 netstat 没有向我显示我的应用程序。我正在使用这个命令:

netstat -q -b -n -p tcp

但要查看 IPv6/TCPv6,我需要这个:

netstat -q -b -n -p tcpv6

由于地址类似于此 ipv6 环回:[::1]:12345

请注意,您可以多次调用它,所以现在我使用类似于这些行的内容:

builder.AddListeningPort("127.0.0.1:12345", grpc::InsecureServerCredentials(), &tcp4_port);
builder.AddListeningPort("[::1]:12345", grpc::InsecureServerCredentials(), &tcp6_port);

【问题讨论】:

    标签: c++ windows grpc


    【解决方案1】:

    文档中有关于selected_port 的说法:

    如果不是nullptr,则在成功绑定BuildAndStart()后,使用绑定到相应端点的grpc::Server的端口号填充,否则为0。 AddListeningPort 不会修改此指针。

    对于addr_uri

    要绑定到任何地址,请使用 IPv6 any,即[::]:&lt;port&gt;,它也接受 IPv4 连接。

    尝试将"[::]:12345" 传递为addr_uri,并且仅在调用BuildAndStart 之后检查tcp_port 的值

    【讨论】:

    • 让我在凌晨 3 点尝试完成这项工作。在您指出之前,我不理解“AddListeningPort 不会修改此指针”文本。
    猜你喜欢
    • 2020-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多