c++ - 获取从 grpc 客户端传输的二进制数据

标签 c++ server client-server wireshark grpc

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

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

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

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

message RollNo{
    int32 roll = 1;
}

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

实际的服务器和客户端代码是对示例代码解释的改编 here

现在我的服务器可以监听 “0.0.0.0:50051(address:port)” 并且客户端可以在 “localhost:50051” 上发送 roll no em> 并接收详细信息。

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

这里是wireshark抓包的截图 Wireshark Screenshot

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

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

最佳答案

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

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

About to click "Decode As" in context menu

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

After setting "HTTP" as the Content

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

Decoding as HTTP/2

关于c++ - 获取从 grpc 客户端传输的二进制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55015732/

相关文章:

c++ - Stroustrup 的 C++ : exercise 6. 2.3 字符类型转换对我不起作用

java - 如何从服务器向客户端编写答案(Java,HTML)

java - 客户端不从套接字读取数据?

c - 我怎样才能接受多个客户端到 TCP 服务器?

c - 如何将客户端的recv()部分更改为中断服务例程?

c++ - 临时对象的生命周期 : iterator to temporary vector in nested function call

c++ - OpenCV 中的 Hessian 仿射检测器

c - 为什么我会收到由于代码错误而无法显示图像的信息?

tcp - 如何在 Go 编程中将 []byte 转换为 int

具有用户定义类型的 C++ 最小堆