socket 大文件如何发送

socket 大文件如何发送,第1张

大文件的发送可以把大文件按照二进制byte[]的方式读取 设定一次发送的最大字节数 然后根据最大发送字节数分割成N个等分可能最后一个N的字节数小于最大发送字节数 解决方法是后面补填0就可以了因为发送时间可能会很长 因此用TCP 协议 保证传输的完整性 另外你可以自己编写协议(每次发送之前做一次校验 接收方校验通过就通知发送方发送下一个包就可以了) 做实验的话校验部分就可有可无

昨天有去做测试,发现,并不是IO的问题造成整体的传输慢!还会代码存在问题

我按照自己3的思路去完成代码,也就是在Server端,我分了两个线程,一个线程用于读取文件,并将读到的buf加入到一个动态链表尾部,另一个线程从此链表头取数据,进行send *** 作,并且对send的返回值进行校验,如果send的返回值和预期的发送字节数不同,则采用断点重传的方式,继续传输。在Client端口,也是用类似的服务端的机制,维护一个链表,进行读取。

需要说明的是:我维护的这个链表是由深度的,并通过深度来调节两个线程对链表的 *** 作。

这要考虑到文件I/O的效率和传输的速率的问题。

关于I/O效率:buffer的值对I/O效率有很大影响,一般而言buffer缓冲区大小设置为1024 2048 或者4096会得到最佳速率。

关于传输:这个和你的带宽和网络状况有关了,带宽越大,网络状况越好自然传输速度就快。

至于编码,你多线程传输跟单线程传输效率基本上差不多。跟普通文件一样的方式传输就行。

如有不同意见的朋友请指教!谢谢!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11405137.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存