gpt4 book ai didi

c - 尝试从二进制文件读取足够字节时出现问题

转载 作者:行者123 更新时间:2023-11-30 15:22:23 25 4
gpt4 key购买 nike

我目前正在开发一个项目,我从客户端向服务器发送二进制文件。

我现在面临的主要问题是,当我在文件末尾使用大小为 1400 (char[1400]) 的有效负载发送时,它只会读取更多内容,而不仅仅是大小它发送给我,我认为它读取了一些随机内存区域。这样做的问题是,它破坏了我的程序的其余部分

这是我迄今为止尝试过的

   #define MSGSIZE      1400
#define COUNT 100

typedef struct {
int len;
char payload[MSGSIZE];
} msg;

int rest = size % MSGSIZE;

int length_final = 0;
if(rest % sizeof(char) != 0){
length_final = rest / sizeof(char) + 1;

}
else{
length_final = rest / sizeof(char);
}



while(smth<size){
res = recv_message(&r);
if(((count = fwrite(r.payload,1,MSGSIZE,file1))+smth)<size){

sprintf(r.payload,"ACK");
r.len = 4;

res = send_message(&r);
if (res < 0) {
perror("[RECEIVER] Send ACK error. Exiting.\n");
return -1;
}
else{
if(smth<size){
smth +=count;

}else{
break;
}

}
}
else{

count = fwrite(r.payload,1,length_final,file1);
sprintf(r.payload,"ACK");
r.len = 4;

res = send_message(&r);
smth +=count;
}
}

它仍然不起作用。到目前为止我做错了什么有什么想法吗?

引用文件的最后一行包含[1651]: 706f 7274 00

我的输出文件包含 1651 : 706f 7274 0074 7566 662e 6300 5f5f 4a43 ,我的文件还打印了 100 多行随机行

PS:我通过每个recv_message接收字节 block

最佳答案

准确地了解您正在尝试执行的操作并不容易,但按照这些思路进行简化的操作可能会起作用。具体来说,不是归档整个缓冲存储器,而是仅写入其struct中指示的长度。

#define MSGSIZE 1400

typedef struct {
int len;
char payload[MSGSIZE];
} msg;

int process_msg(int size) {
msg ack = {4, "ACK"}, r = {0};
int res, count;

while(size > 0){
res = recv_message(&r);
if (res < 0) {
perror("Receiver error. Exiting.\n");
return -1;
}
if (r.len > 0) {
count = fwrite(r.payload, 1, r.len, file1);
if (count != r.len) {
perror("Failed to write to file. Exiting.\n");
return -1;
}
}
res = send_message(&ack);
if (res < 0) {
perror("Failed to send ACK message. Exiting.\n");
return -1;
}
size -= r.len;
}
return 0;
}

关于c - 尝试从二进制文件读取足够字节时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29234158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com