首页 > 解决方案 > 获取从 grpc 客户端传输的二进制数据

问题描述

我是 gRPC 框架的新手,我在我的 PC 上创建了一个示例客户端-服务器(参考this)。

在我的客户端-服务器应用程序中,我实现了一个简单的 RPC

service NameStudent {
  rpc GetRoll(RollNo) returns (Details) {}
}

客户发送一个RollNo并收到他/她的详细信息,包括姓名、年龄、性别、父母姓名和 roll no。

message RollNo{
    int32 roll = 1;
}

message Details {
    string name = 1;
    string gender = 2;
    int32 age = 3;
    string parent = 4;
    RollNo rollid = 5;
}

实际的服务器和客户端代码改编自此处解释的示例代码

现在我的服务器能够监听“0.0.0.0:50051(address:port)”并且客户端能够在“localhost:50051”上发送卷号并接收详细信息。

我想查看在客户端和服务器之间传输的实际二进制数据。我曾尝试使用 Wireshark,但我不明白我在这里看到了什么。

这是wireshark捕获的截图 Wireshark 截图

这是上面屏幕截图中突出显示的条目的详细信息。 细节

在此处需要帮助理解wireshark,或任何其他可用于查看二进制数据的方式。

标签: c++serverclient-serverwiresharkgrpc

解决方案


Wireshark 使用端口来确定如何解码通信,它不知道任何与 50051 关联的协议。因此您需要将其配置为将其视为 HTTP。

右键单击一行并在上下文菜单中选择“解码为...”。

即将点击

然后将“当前”设置为“HTTP”或“HTTP2”(HTTP 通常会自动检测 HTTP2)并点击“确定”。

设置后

然后应该解码 HTTP/2 帧。如果使用最新版本的 Wireshark,您可能还会看到已解码的 gRPC 帧。

解码为 HTTP/2


推荐阅读