从Java服务器到多个C ++客户端的高效文件传输?

时间:2009-10-30 05:08:22

标签: java c++ nio file-transfer

我需要通过Internet快速将文件从Java服务器传输到C ++客户端,而C ++客户端通常需要相同的文件。我在Java中看到说transferTo()听起来像是一个发送文件的优化功能。但是,我不确定何时使用transferTo()如何在C ++中最好地接收它(即它只是原始数据传输,如何确定文件在客户端何时结束等)。我需要这个在Windows和Linux上工作。另外,除了transferTo()之外,是否还有某种方法可以提高效率,特别是通过利用许多客户端通常需要相同文件的事实?我不知道怎么说组播等。另外,我使用的是应用级安全而不是VPN,而且在Java服务器上,使用AES加密并使用MAC数字签名,所以我也在寻找跨平台库建议以最小的痛苦处理C ++方面的加密。 我非常精通C ++,但之前没有网络编程经验,所以请考虑比任何建议。 感谢。

4 个答案:

答案 0 :(得分:2)

嵌入式网络服务器? http传输对你来说足够有效吗?

我记得看到的最简单的可嵌入Java Web服务器是http://acme.com/java/software/Acme.Serve.Serve.html。我们在工作中使用嵌入式Jetty 6,但这需要更多的肘部油脂。

如果您的客户首先不知道在哪里找到您的网络服务器,请考虑宣布使用Zeroconf。 http://jmdns.sourceforge.net/

答案 1 :(得分:1)

出于可扩展性原因,Thorbjørns建议使用http似乎是一个非常好的主意,因为它可以让您轻松设置http代理以进行缓存,使用标准负载平衡工具等等。

如果您希望传输的不仅仅是数据blob,那么您可能需要查看googles协议缓冲区。它们允许在java和c ++端进行非常简单快速的编码/解码。

答案 2 :(得分:0)

考虑分块文件并通过UDP数据报发送。 C ++可以在收到它时重新编译。您是否考虑过实施/嵌入现有的P2P协议实施?

答案 3 :(得分:0)

如果您需要有效转移到许多客户端,那么您的瓶颈就是服务器。

为此,请查看bit-torrent协议,因为它在客户端之间分配传输。