【Linux网络编程七】网络序列化和反序列化(网络版本计算器)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#define BUFF_SIZE 1024
typedef enum {
ADD = 1,
SUB,
MUL,
DIV,
MOD,
} OpCode;
typedef struct {
OpCode opcode;
int num1;
int num2;
} Request;
typedef struct {
int result;
} Response;
void serialize(char* buff, Request* req) {
Request* req_buff = (Request*)buff;
req_buff->opcode = htons(req->opcode);
req_buff->num1 = htons(req->num1);
req_buff->num2 = htons(req->num2);
}
void deserialize(char* buff, Response* res) {
Response* res_buff = (Response*)buff;
res->result = ntohs(res_buff->result);
}
int main() {
Request req;
Response res;
char send_buff[BUFF_SIZE];
char recv_buff[BUFF_SIZE];
// 填充请求结构体
req.opcode = ADD;
req.num1 = 25;
req.num2 = 13;
// 序列化请求
serialize(send_buff, &req);
// 发送序列化后的数据到服务器...(省略网络发送代码)
// 接收从服务器返回的序列化数据...(省略网络接收代码)
// 反序列化响应
deserialize(recv_buff, &res);
// 输出结果
printf("Result: %d\n", res.result);
return 0;
}
这个示例代码展示了如何在客户端和服务器之间发送和接收序列化的数据。客户端创建一个请求结构体,将其序列化,然后发送到服务器。服务器接收请求,处理计算,并创建一个响应结构体,序列化它,然后发送回客户端。客户端接收序列化的响应并反序列化,最后输出结果。这里使用了htons
和ntohs
函数来处理网络字节序和主机字节序之间的转换。
评论已关闭