热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

文件传输的优化与安全策略探讨

本文探讨了文件传输过程中的优化与安全策略。具体而言,研究了如何将客户端的文件高效上传至服务器。通过使用结构体对象,可以封装文件的相关信息,如位置和大小,并利用缓冲区存储实际数据,从而实现高效的数据传输。此外,文章还讨论了在传输过程中确保数据完整性和安全性的多种方法,包括加密技术和身份验证机制。
现在我需要把一个文件从客户端上传到服务器。
传输部分OK。现在可以把一个结构体对象的东西传送到服务器

结构体可以封装文件包的位置、大小等信息,然后其中一个buffer可以存放数据..
struct tagFilePacket
{
u32 offset;
u32 size;
char buffer[2048];
}

现在我不太清楚的是传文件可以以怎样的方式处理文件...
现在想到的方法就是:
从文件读出一块->封装上那一块的信息->传输到服务器->服务器取出信息和数据,根据信息把数据存入文件...
读取文件按顺序,从文件头读到文件尾,写文件也是按这样的顺序...

但是这样每次只能发送一包,感觉不太好,请问有没有更好的方法去拆,拼文件?

7 个解决方案

#1


不要这样发,如果是tcp的话,你甚至可以完全不用任何头部,直接把文件发过去(一次发送的缓冲区自己定大小),最后调用一次shutdown表示发送完毕(tcp协议中的fin)。tcp能保证完整性和顺序

即便加头部,也只需要加一个,不需要每组都加

你的这个头部,有点像udp协议发文件,虽然udp协议开销小,但正如你的情况,如果实现不好性能可能远低于tcp

如果用windows,TransmitFile这个API直接帮你解决一切难题

#2


调用一次shutdown表示发送完毕,你太狠了。

#3


引用 2 楼  的回复:
调用一次shutdown表示发送完毕,你太狠了。

有点狠,但也不是不可以,shutdown又不是close,相应的对端的recv会返回0,表示一轮交互的结束,但连接仍保持的

#4


协议定位:

尺寸 MD5 内容


网络编程不会做拆包解包, 不会做状态机的话, 只能去看点开源代码了.

#5


你可以了解以下缓冲区的大小从而确定每次的传送字节数,否则很容易乱序,或者用我以前用过的一个笨方法,每当发送一次就调用以下sleep()把sleep()值设置的小一点如果是单线程那么可能大文件会造成程序假死现象

#6


引用 5 楼  的回复:
你可以了解以下缓冲区的大小从而确定每次的传送字节数,否则很容易乱序,或者用我以前用过的一个笨方法,每当发送一次就调用以下sleep()把sleep()值设置的小一点如果是单线程那么可能大文件会造成程序假死现象


tcp肯定不会乱序,udp就算你sleep了也不能保证不乱序……

#7


不知道有多少前人掉在TCP Socket
send(人多)send(病少)send(财富)
recv(人多病)recv(少财富)
陷阱里面啊!
http://topic.csdn.net/u/20120210/09/51109ed0-07b9-41f2-b487-a51597f2ca01.html

推荐阅读
  • 2017-2018年度《网络编程与安全》第五次实验报告
    本报告详细记录了2017-2018学年《网络编程与安全》课程第五次实验的具体内容、实验过程、遇到的问题及解决方案。 ... [详细]
  • 阿里云ecs怎么配置php环境,阿里云ecs配置选择 ... [详细]
  • 主板IO用W83627THG,用VC如何取得CPU温度,系统温度,CPU风扇转速,VBat的电压. ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 本文介绍如何配置SecureCRT以正确显示Linux终端的颜色,并解决中文显示问题。通过简单的步骤设置,可以显著提升使用体验。 ... [详细]
  • 解决FCKeditor应用主题后上传问题及优化配置
    本文介绍了在Freetextbox收费后选择FCKeditor作为替代方案时遇到的上传问题及其解决方案。通过调整配置文件和调试工具,最终解决了上传失败的问题,并对相关配置进行了优化。 ... [详细]
  • 在使用STM32Cube进行定时器配置时,有时会遇到延时不准的问题。本文探讨了可能导致延时不准确的原因,并提供了解决方法和预防措施。 ... [详细]
  • 目录一、salt-job管理#job存放数据目录#缓存时间设置#Others二、returns模块配置job数据入库#配置returns返回值信息#mysql安全设置#创建模块相关 ... [详细]
  • 本文详细介绍了在使用 SmartUpload 组件进行文件上传时,如何正确配置和查找文件保存路径。通过具体的代码示例和步骤说明,帮助开发者快速解决上传路径配置的问题。 ... [详细]
  • 在PHP后端开发中遇到一个难题:通过第三方类文件发送短信功能返回的JSON字符串无法解析。本文将探讨可能的原因并提供解决方案。 ... [详细]
  • 为了解决不同服务器间共享图片的需求,我们最初考虑建立一个FTP图片服务器。然而,考虑到项目是一个简单的CMS系统,为了简化流程,团队决定探索七牛云存储的解决方案。本文将详细介绍使用七牛云存储的过程和心得。 ... [详细]
  • 本文详细介绍了 phpMyAdmin 的安装与配置方法,适用于多个版本的 phpMyAdmin。通过本教程,您将掌握从下载到部署的完整流程,并了解如何根据不同的环境进行必要的配置调整。 ... [详细]
  • 本题要求在一组数中反复取出两个数相加,并将结果放回数组中,最终求出最小的总加法代价。这是一个经典的哈夫曼编码问题,利用贪心算法可以有效地解决。 ... [详细]
  • 深入理解Java多线程并发处理:基础与实践
    本文探讨了Java中的多线程并发处理机制,从基本概念到实际应用,帮助读者全面理解并掌握多线程编程技巧。通过实例解析和理论阐述,确保初学者也能轻松入门。 ... [详细]
  • 本文探讨了如何使用pg-promise库在PostgreSQL中高效地批量插入多条记录,包括通过事务和单一查询两种方法。 ... [详细]
author-avatar
宛如画中人需_308
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有