socket传输大文件

y1018799688 2013-12-30 02:21:57
请问下java作为服务端,c#作为客户端,如何传输大文件比较快?

谢谢!
...全文
203 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
本拉灯 2013-12-31
  • 打赏
  • 举报
回复
顶楼上,目前我们的项目就这么干的。跟外面吹的云存储也就这么一回事,
  • 打赏
  • 举报
回复
你可以为传送文件、服务器端管理文件,单独设计一个子系统。这样可以支持不断重构的架构设计,甚至包括利用(例如mongoDb)分布式数据库的内置文件分片存储和查找功能。 如果只照抄一点非常初级的那些语句,只能纠结在一些小伎俩上,不能发挥架构设计的优势。
  • 打赏
  • 举报
回复
随便说两句。 首先,要发一个“预传输”命令,包括要传输的文件的信息,特别要带上md5(或者别的校验),而并不包括要传输的内容。这时侯服务器要检验是否已经有了此文件,是否md5一致,如果一致,则返回值的状态、告诉客户端就不要再传了、直接结束就行了。 如果服务器端没有完全一致的文件,那么客户端可以分块上传。比如说顺序上传,可以把块设置得大一些,例如512k一块(size大一些可以保证高速传送)。如果服务器端原本就有一个文件(服务器使用上一个返回状态告知),那么客户端也可以先传连续好几个块的md5值,然后服务器返回哪些块才需要传送(如果md5一致,就不必传送了)。 在服务器端,应该为所有资源文件的md5建立索引。如果两个文件的md5相同,那么直接从服务器端拷贝就行了(甚至不需要拷贝而只要记录一下),不需要客户端传送。因此即使文件名称等等信息都不相同,但是md5相同,也不要让客户端额外上传文件内容了!
much0726 2013-12-30
  • 打赏
  • 举报
回复
分多个线程分段接收,最后重组。最好在传输包中加上整个文件的校验。 分段接收要重多个端口发送出来。
bdmh 2013-12-30
  • 打赏
  • 举报
回复
和语言无关,就是分块传送,指定传输协议

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧