gpt4 book ai didi

c++ - 无法使用 UDP 通过二进制文件发送 pdf

转载 作者:行者123 更新时间:2023-11-28 06:35:22 25 4
gpt4 key购买 nike

我在通过读取二进制文件将 pdf 文件从客户端发送到服务器时遇到了一些问题。我正在使用 UDP 传输,当我从客户端向服务器发送文本文件时,我完全没有任何错误地收到该文件,但是当我发送 PDF 时,我在打开文件时遇到错误。这是我对发件人和收件人的看法:

发件人:

file = fopen(file_name_char, "rb"); //read in binary here

int size_count = (file_size / (BUFFER_SIZE - 2)) + 1; //amount of times to loop

for (int i = 0; i < size_count; i++)
{
memset(szbuffer, 0, BUFFER_SIZE);
fread(szbuffer, sizeof(char), BUFFER_SIZE - 2, file); //Read for the buffersize -2 (reserve a spot for bit and \0)

strcpy(szbuffer, concat(current_bit, szbuffer));

send_with_select(s, szbuffer, (struct sockaddr*)&sa1, (struct sockaddr*)&sa1, sa1_length, current_bit, "file contents", 0); //send file contents

file_size = file_size - BUFFER_SIZE + 2; //decrease size

client_bit = change_bit(client_bit);
*current_bit = bit_string(client_bit);
//change bit
}
fclose(file);

对于我的 UDP 传输,我在每个缓冲区前加上一个序列号来模拟 Stop N Wait 协议(protocol)

接收者:

int size_count = (file_size / (BUFFER_SIZE - 2)) + 1; //amount of times to loop

for (int i = 0; i < size_count; i++)
{
file = fopen(file_name, "ab");
//open file for writing

memset(szbuffer, 0, BUFFER_SIZE);
receive_packet_transfer(s, szbuffer, (struct sockaddr*)&sa_in, (struct sockaddr*)&sa_in, sa_length, current_bit, content, "file contents", client_bit); //receive file contents

client_bit = change_bit(client_bit);
*current_bit = bit_string(client_bit);
//change bit

if (file_size <= BUFFER_SIZE)
fwrite(content, sizeof(char), file_size, file);
else
fwrite(content, sizeof(char), BUFFER_SIZE - 2, file); //write into file

file_size = file_size - BUFFER_SIZE + 2; //decrease size
fclose(file);
}

我已经使用 sendto() recvfrom() 方法实现了 send_with_select() 和 receive_packet_transfer() 。它们基本上做同样的事情,但等待 ACK 或超时(使用 select)。

最佳答案

strcpy(szbuffer, concat(current_bit, szbuffer));

strcpystrlen 等字符串操作函数仅适用于不能单独包含 \0 的文本数据,因为它们考虑 \0 字符串的结尾。但是 PDF 是二进制的,因此可以包含 \0。因此 strcpy 只会将数据复制到第一个 \0

除此之外,使用 UDP 传输文件不是一个好主意,除非您确保可以处理丢失的数据包、重复的数据包和数据包重新排序。最好使用已经关心所有这些的 TCP。

关于c++ - 无法使用 UDP 通过二进制文件发送 pdf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26869807/

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