我正在构建一个.NET远程客户端/服务器,它将传输数千个不同大小的文件(从几个字节到几百MB),我想要一些关于实现最佳方法的反馈这个。在我看来,有几个选择:
最灵活/可靠的传输方法是什么?我不关心速度,但更关心可靠性 - 我希望文件移动,即使它很慢。由于客户端和服务器是多线程的,如果连接允许,我可以同时传输多个文件。
感谢您的反馈意见 - 我会慷慨解囊,就人们如何实现这一目标提出一些建议。
答案 0 :(得分:4)
BITS(后台智能传输服务)是一个很好的解决方案。它具有多年的内置经验
一些起点是
答案 1 :(得分:1)
虽然冷静确实回答了你从OSI第4层生活中提出的问题,但我觉得你更倾向于在你的问题中更多地关注应用程序层。 TCP绝对可以处理生活网络方面的延迟,传输窗口等所有内容。但是,如果用户提前结束下载会话,然后决定在他们中断的地方稍后再接收会话,则不直接确定会发生什么。
要从不同的角度回答您的问题,我肯定会建议将文件分块并为所有连接索引它们,无论速度如何。一旦整个文件下载,它们就可以在客户端上再次重新组装。这允许用户暂停下载会话并恢复。
就确定速度而言,可能有预先构建的方法来执行此操作,但您可以使用的一种方法是构建自己的速度测试: 向客户端发送1 MB(上传)并在收到后发送响应。 1100除以从客户端获得响应所花费的时间,是客户端从服务器下载所需的KB / s。反之亦然,从客户端测试上传。
就传输而言,我建议使用现有技术。 SFTP支持经过身份验证的加密数据传输。它基本上是FTP,但通过SSH。应该有一些API可用于与之交互。
另一方面,我从来没有做过你所谈论的任何事情,但希望我的想法至少可以给你几个选择。
答案 2 :(得分:0)
这就是TCP本身的用途,并在几十年或硬测试期间进行了调整。 Remoting用于小型RPC调用,而不是大型文件传输。您应该只使用TCP套接字来传输数据,让低层协议担心延迟,传输窗口,MTU等。