代码之家  ›  专栏  ›  技术社区  ›  Sergej Andrejev

如何在两台计算机之间传递大量数据

  •  1
  • Sergej Andrejev  · 技术社区  · 14 年前

    有哪些可能的选项可以将大量数据从一台计算机传输到不在同一局域网中的另一台计算机。数据量约为100Mb解压和2Mb压缩?另一个要求是,当我为此创建一个服务器(使用C#)时,Java客户机应该能够使用它。

    • WCF支持这样的东西吗?但是如果Java客户机不能使用它,我就不感兴趣了。
    6 回复  |  直到 14 年前
        1
  •  2
  •   David Z    14 年前

    我只会使用一些常见的东西,比如HTTP或FTP,因为会有很多现有的库来做这件事,而且您几乎可以保证不会有兼容性问题。对于这些协议来说,2MB并不是一个不合理的大数据量。

        2
  •  1
  •   UnixShadow    14 年前

    这是一个有趣的问题。这个问题回答起来相当简单。但有趣的是,这种问题是新的,它们以前不存在。让我解释一下,但首先我要回答你的问题:

    您应该使用老式的TCP流创建服务器和客户端。为了避免您需要以某种方式压缩流,这里使用您能找到的最常见的压缩算法之一(有人说Zip吗?)。现在你有了一个独立于语言的协议。任何语言的客户都可以工作,任务完成。同样要保持它的跨平台性,不要选择最好的压缩方式,选择最常见的(这样就足够了)。

    至于为什么这类问题很有趣,它们展示了大规模的OOP。人们理解和使用巨大的框架,并询问这个或那个框架是否可以为他们执行这个或那个简单的任务。在这里我们失去了我们的根,我们失去了事物的内在运作,它不是用锤子而是用核导弹击中钉子。它超出了目标,将产生巨大的应用程序,占用大量的空间,而且性能往往很差。

        3
  •  0
  •   ace    14 年前

    在C#中,您可以将对象序列化为XML并进行传输,而在另一端,您可以将XML反序列化为对象。

    就文件大小而言,您可以使用zipped或7z.格式进行传输,并在解析xml之前在客户端对其进行解压缩。

        4
  •  0
  •   Ashley    14 年前

    WCF支持SOAP,并包括XHTTP的可选JSON序列化。还有其他机制,但它们是MS导向的。您将很容易地使用您创建的服务。但是,您必须考虑如何对数据进行编码,因为它将以非二进制数据友好的方式(XML/JSON)访问数据线。

    您可能希望创建一个简单的http处理程序,该处理程序可以使用适当的mime头等直接以zip格式返回数据。

        5
  •  0
  •   Andreas Dolk    14 年前

    XMPP是另一种选择。您需要另一台服务器,但这可能是一个优势:客户机不需要知道服务器的IP地址,服务器和客户机只需连接到XMPP服务器即可交换消息和文件。

    相关链接(对于Java):

        6
  •  0
  •   Ladislav Mrnka    14 年前

    你没有提到你想发送什么类型的数据。为了简单起见,我假设您有可以转换为字节数组的数据流。流的内容必须是C和Java都能理解的格式!

    最好的选择是用GZip流压缩数据流。Java应该支持Gzip。然后您可以将转换为字节数组的流作为WCF服务操作的响应发送。可以使用默认文本编码,将字节数组转换为Base64编码的字符串。如果您的java客户机支持MTOM(这是java支持的标准),那么您可以使用MTOM编码,它使用较小的消息。