Linuxc++socket 接收protobuf并解码的demo
时间: 2023-07-29 18:10:45 浏览: 108
以下是一个简单的示例代码,演示了如何在Linux C++中接收protobuf消息并进行解码:
```cpp
#include <iostream>
#include <string>
#include <netinet/in.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include "my_proto.pb.h"
using namespace std;
int main() {
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
cerr << "socket error!" << endl;
exit(-1);
}
struct sockaddr_in servaddr;
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(8080);
servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
if (connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) < 0) {
cerr << "connect error!" << endl;
exit(-1);
}
char buffer[1024];
int n = read(sockfd, buffer, sizeof(buffer));
if (n < 0) {
cerr << "read error!" << endl;
exit(-1);
}
MyProto my_proto;
if (!my_proto.ParseFromArray(buffer, n)) {
cerr << "protobuf parse error!" << endl;
exit(-1);
}
cout << "message: " << my_proto.message() << endl;
close(sockfd);
return 0;
}
```
这里假设我们已经定义了名为`MyProto`的protobuf消息类型,并将其编码后发送给了本机的8080端口。在客户端中,我们首先创建一个Socket套接字,并将其连接到服务器。然后,我们从Socket中读取数据,并将其存储在名为`buffer`的字符数组中。接下来,我们使用`ParseFromArray`函数将`buffer`中的数据解析为protobuf消息。最后,我们打印出消息中的内容,并关闭Socket连接。
请注意,上述代码仅为演示目的,并未进行错误处理或异常情况处理。在实际应用中,你需要根据具体情况进行适当的错误处理。
阅读全文