gpt4 book ai didi

c++ - Linux 服务器,向 Windows 客户端发送文件(Socket)

转载 作者:IT王子 更新时间:2023-10-29 01:13:42 45 4
gpt4 key购买 nike

当我将文件发送到客户端时,它被损坏,并且字节大小更高。

我有一个在 Windows 上运行的服务器版本并且运行良好,但在 Linux 上却没有相同的结果。

磁盘上的文件大小可能是将字节大小发送给运行在另一个平台上的客户端的时间错误?

客户端完美运行,正如我所说,我有一个运行在 Windows 上的服务器版本,唯一的区别在于 fread:Size = fread(mfcc, 1, min(sizeof(mfcc), FileSize) , fp);

是否正确使用了 fread 函数?

专家可以分析并帮助找出错误吗?

int Socket_Setup::FILE_UPLOAD(int iD, std::string DIR_UPLOAD)
{
char Block[1024];
long FileSize;
fp = fopen(DIR_UPLOAD.c_str(), "rb");
if (!fp)
{
errno_message.append((char*)strerror(errno));
FUNCTION_LOG(errno_message);
return 1;
}

fseek(fp, 0, SEEK_END);
FileSize = ftell(fp);
rewind(fp);

long Size_Send = htonl(FileSize);
Total = FileSize;

// Sending the file size to the Windows Client
iResult = send(client[iD].socket, (const char*)&Size_Send, sizeof(long), 0);
if (iResult <= 0)
{
errno_message.append((char*)strerror(errno));
FUNCTION_LOG(errno_message);
return 1;
}

while (FileSize > 0)
{
BytesRead = fread(Block, 1, sizeof(Block), fp);
if (BytesRead <= 0)
{
errno_message.append((char*)strerror(errno));
FUNCTION_LOG(errno_message);
fclose(fp);
return 1;
}
if (send(client[iD].socket, Block, BytesRead, 0) != BytesRead)
{
errno_message.append((char*)strerror(errno));
FUNCTION_LOG(errno_message);
fclose(fp);
return 1;
}
FileSize -= BytesRead;
}
fclose(fp);
return 0;
}

最佳答案

我认为你的问题出在这里:

iResult = send(client[iD].socket, (const char*)&Size_Send, Size_Send, 0);       

您正在通过此调用发送 Size_Send 字节(其中大部分是 Size_Send 变量末尾后的杂项内存),而不是您可能想要的,即发送 sizeof(long) 字节。将上一行中的第二个 Size_Sent 实例替换为 sizeof(long),您将获得更好的结果。

关于c++ - Linux 服务器,向 Windows 客户端发送文件(Socket),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32879295/

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