当我将文件发送给客户端时,它会变得损坏,并且大小以字节为单位更大。
我在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;
}