c – Linux服务器,将文件发送到Windows客户端(套接字)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c – Linux服务器,将文件发送到Windows客户端(套接字),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1665字,纯文字阅读大概需要3分钟。
内容图文
当我将文件发送到客户端时,它会被破坏,并且大小以字节为单位.
我有一个在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(长)字节.用sizeof(long)替换上面一行中Size_Sent的第二个实例,你会得到更好的结果.
内容总结
以上是互联网集市为您收集整理的c – Linux服务器,将文件发送到Windows客户端(套接字)全部内容,希望文章能够帮你解决c – Linux服务器,将文件发送到Windows客户端(套接字)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。