gpt4 book ai didi

c++ - grpc 的 ServerBuilder::AddListeningPort() 总是返回 TCP 端口零

转载 作者:行者123 更新时间:2023-12-02 10:07:03 33 4
gpt4 key购买 nike

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

使用 grpc 的 ServerBuilder类(class)。来自 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 确认我没有任何东西绑定(bind)到这些端口。)

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

编辑:
对于将来在谷歌上搜索与 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);

最佳答案

文档中有关于 selected_port 的说法。 :

If not nullptr, gets populated with the port number bound to the grpc::Server for the corresponding endpoint after it is successfully bound by BuildAndStart(), 0 otherwise. AddListeningPort does not modify this pointer.



对于 addr_uri :

To bind to any address, please use IPv6 any, i.e., [::]:<port>, which also accepts IPv4 connections.



尝试通过 "[::]:12345"addr_uri并且只检查 tcp_port 的值 之后 调用 BuildAndStart .

关于c++ - grpc 的 ServerBuilder::AddListeningPort() 总是返回 TCP 端口零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59732082/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com