随笔 - 170  文章 - 0  评论 - 16  阅读 - 35908 

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

typedef struct rpc_return_data {
int wait_response;
int retu_data_len;
char retu_data[0];
} rpc_retu_data_t;

int append_recv(char *rcv_buf, int rcv_len, rpc_retu_data_t **tota_rcv_buf, int *tota_len)
{
int len;
rpc_retu_data_t *new_buf;
char *chs;
char *p;

if (rcv_buf == NULL)
{
return -1;
}

if (*tota_rcv_buf != NULL)
{
len = *tota_len + rcv_len;
new_buf = (rpc_retu_data_t *) malloc(len + sizeof(rpc_retu_data_t) + 1);
new_buf->wait_response = (*tota_rcv_buf)->wait_response;
new_buf->retu_data_len = len;
*tota_len = len;
p = (char *)new_buf;
p = p + sizeof(rpc_retu_data_t); //跨过rpc_retu_data_t头
memcpy(p, (*tota_rcv_buf)->retu_data, (*tota_rcv_buf)->retu_data_len); //把数据拷贝到头的后面
p = p + (*tota_rcv_buf)->retu_data_len; //跨过头和旧数据
memcpy(p, rcv_buf, rcv_len);
chs = (char *)new_buf;
chs[len + sizeof(rpc_retu_data_t)] = '\0';
free(*tota_rcv_buf); //释放旧数据
*tota_rcv_buf = new_buf;

} else {
len = rcv_len;
new_buf = (rpc_retu_data_t *) malloc(len + sizeof(rpc_retu_data_t) + 1);
new_buf->wait_response = 1; //这是处理读取的反馈数据,所以必然1;就是不是1,也不会错。
new_buf->retu_data_len = len;
*tota_len = len;
p = (char *)new_buf;
p = p + sizeof(rpc_retu_data_t); //跨过rpc_retu_data_t头
memcpy(p, rcv_buf, rcv_len);
chs = (char *)new_buf;
chs[len + sizeof(rpc_retu_data_t)] = '\0';
*tota_rcv_buf = new_buf;
}

return len;

}

int main(int argc, char * argv[])
{
char buf[256];
int tota_len = 0;
int len;
rpc_retu_data_t *total_buf = NULL;

memset(buf, 0, 256);
while(scanf("%s", buf))
{
len = strlen(buf);
append_recv(buf, len, &total_buf, &tota_len);
memset(buf, 0, 256);
printf("\ntotal_buf->retu_data_len=%d string=%s \n", total_buf->retu_data_len, total_buf->retu_data);
}
}

 

posted on   北京开发  阅读(44)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示