热门标签 | 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

推荐阅读
  • 如何将PHP文件上传至服务器及正确配置服务器地址 ... [详细]
  • FastDFS Nginx 扩展模块的源代码解析与技术剖析
    FastDFS Nginx 扩展模块的源代码解析与技术剖析 ... [详细]
  • 基址获取与驱动开发:内核中提取ntoskrnl模块的基地址方法解析
    基址获取与驱动开发:内核中提取ntoskrnl模块的基地址方法解析 ... [详细]
  • TypeScript 实战分享:Google 工程师深度解析 TypeScript 开发经验与心得
    TypeScript 实战分享:Google 工程师深度解析 TypeScript 开发经验与心得 ... [详细]
  • 【Linux】CentOS 7 远程连接指南:高效安全的远程管理方法
    在 CentOS 7 中实现高效且安全的远程管理,本文详细介绍了如何检查和安装配置 OpenSSH。首先,通过 `yum list installed` 命令检查系统是否已安装 OpenSSH,若未安装,则使用 `yum install openssh-server` 进行安装。随后,配置 SSH 服务以确保其安全性和稳定性,包括修改默认端口、禁用 root 登录等关键步骤。此外,还提供了常见问题的解决方案,帮助用户顺利进行远程连接。 ... [详细]
  • 如何配置东保智能照明系统的控制模块? ... [详细]
  • 本文深入探讨了CGLIB BeanCopier在Bean对象复制中的应用及其优化技巧。相较于Spring的BeanUtils和Apache的BeanUtils,CGLIB BeanCopier在性能上具有显著优势。通过详细分析其内部机制和使用场景,本文提供了多种优化方法,帮助开发者在实际项目中更高效地利用这一工具。此外,文章还讨论了CGLIB BeanCopier在复杂对象结构和大规模数据处理中的表现,为读者提供了实用的参考和建议。 ... [详细]
  • HTML5 WebSocket技术详解与应用前景
    WebSocket 是 HTML5 引入的一种在单一 TCP 连接上实现全双工通信的技术。作为一种高效且低延迟的协议,WebSocket 允许服务器和客户端之间进行实时双向数据交换。该技术不仅简化了开发过程,还显著提升了 Web 应用的性能和用户体验。未来,随着更多应用场景的探索,WebSocket 在实时通信领域的应用前景将更加广阔。 ... [详细]
  • 如何在Mac上构建高效的本地服务器环境
    在Mac上构建高效的本地服务器环境,首先需要了解基本步骤:1. 配置目录基础;2. 启动Apache服务;3. 添加自定义文档至本地服务器;4. 查看自定义效果。此外,还可以通过手机或其他电脑访问本机服务器,以确保跨设备的兼容性和调试效果。Mac系统自带的Apache服务为本地开发提供了便捷的工具,本文将详细介绍每个步骤的具体操作方法。 ... [详细]
  • 在 openSUSE Tumbleweed 系统上搭建 51 单片机开发环境并进行编程实践。首先,通过 `sudo zypper in emacs` 命令安装文本编辑器 Emacs。接着,使用 `sudo zypper in sdcc` 安装 SDCC 编译器。最后,利用 `wget` 下载 sdcflash Python 脚本,以便于单片机的烧录和调试。此外,还介绍了如何配置开发环境,确保各组件协同工作,提高开发效率。 ... [详细]
  • 在数据库设计中,谨慎使用外键至关重要。本文探讨了九个关键原因,包括数据完整性的维护、性能优化、系统复杂性的管理、数据迁移的灵活性以及对外部系统的依赖性控制。通过深入分析这些因素,可以帮助开发人员和架构师做出更明智的设计决策,确保数据库系统的高效与稳定。 ... [详细]
  • 本文探讨了SMTP AUTH扩展的问题及其在Python中的应用解决方案。通过分析SMTP协议的安全性不足,提出了使用SMTP AUTH扩展来增强邮件传输的安全性。文章详细介绍了SMTP AUTH的工作原理,并结合Python编程语言,提供了一种实现SMTP AUTH认证的方法。此外,还讨论了常见的实现问题及解决策略,为开发者提供了实用的参考。 ... [详细]
  • 掌握PHP编程必备知识与技巧——全面教程在当今的PHP开发中,了解并运用最新的技术和最佳实践至关重要。本教程将详细介绍PHP编程的核心知识与实用技巧。首先,确保你正在使用PHP 5.3或更高版本,最好是最新版本,以充分利用其性能优化和新特性。此外,我们还将探讨代码结构、安全性和性能优化等方面的内容,帮助你成为一名更高效的PHP开发者。 ... [详细]
  • 构建高可用性Spark分布式集群:大数据环境下的最佳实践
    在构建高可用性的Spark分布式集群过程中,确保所有节点之间的无密码登录是至关重要的一步。通过在每个节点上生成SSH密钥对(使用 `ssh-keygen -t rsa` 命令并保持默认设置),可以实现这一目标。此外,还需将生成的公钥分发到所有节点的 `~/.ssh/authorized_keys` 文件中,以确保节点间的无缝通信。为了进一步提升集群的稳定性和性能,建议采用负载均衡和故障恢复机制,并定期进行系统监控和维护。 ... [详细]
  • AppFog 是一个基于 CloudFoundry 的多语言 PaaS(平台即服务)提供商,允许用户在其平台上轻松构建和部署 Web 应用程序。本文将通过详细的图文步骤,指导读者如何在 AppFog 免费云平台上成功部署 WordPress,帮助用户快速搭建个人博客或网站。 ... [详细]
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社区 版权所有