通过TCP套接字传输多个图像

时间:2011-08-11 07:44:33

标签: java sockets tcp file-transfer

我尝试用Java创建一个应用程序,我有一个图像网格。必须通过TCP连接从远程服务器加载每个映像。

我的问题是哪种方法最好?使用一个TCP套接字并通过此请求所有图像,或为每个图像请求打开一个新套接字?

-----更新-----

谢谢大家的回复。

我更新帖子以写一些额外的信息,这些信息可以回答你的一些问题。

  • 系统客户端/服务器位于本地(家庭)网络中,但不会 传输数据抛出Internet,所以连接带宽不是一个 问题。
  • 此外,网格将包含图像的缩略图,即图像I. 当使用双击单独套接字上的缩略图时,将按需加载。
  • 我从客户端编写代码,服务器都用java编写。
  • 我们有一个客户端可能连接到少量服务器但每次只有一个没有与不同服务器的并行连接。

我认为,如果使用单个套接字我必须分开图像大小,图像名称所以我必须为每个图像发送一个带有名称的字符串,并且长度为大小。抛出单个套接字最好在连接开始时一起请求图像,然后以串行的方式一对一地发送所有图像,或者抛出单个套接字发送图像请求获取图像回复,请求后第二个图像得到第二个回复。

如果我使用多个套接字,每个图像请求有一个套接字我希望有最大数量的开放套接字,我可以使用线程池并使用一个runnable管理一个图像传输抛出一个套接字吗?

再次感谢你。

4 个答案:

答案 0 :(得分:0)

如果您负责服务器和客户端,则没有理由不使用单个连接一次加载多个(所有)图像。它当然会更有效率。

答案 1 :(得分:0)

如果带宽和服务器容量允许,使用多个套接字可以并行执行多个传输。

使用单个套接字进行所有传输的另一个缺点是您必须找到一些方法让客户端检测每个文件的结尾。每个文件使用一个套接字简化了这一点,因为远程服务器只需在每个文件后关闭连接。

除了TCP套接字的设置时间可能微不足道的减少之外,我想不出去单个套接字的任何特殊优势。

所以总的来说,我会为每个文件寻找一个套接字。

我还注意到HTTP使用两者的组合 - 并行连接每个插槽多次下载。然而,后者的优化在传输大量小文件时非常有用,在传输100k +图像文件时不太可能有用。

答案 2 :(得分:0)

我认为使用一个TCP套接字更好,因为你有一个图像网格,如果你想为每个图像打开一个套接字,套接字的数量会增加,并可能导致问题。 您可以对所有图像传输保持套接字打开,然后将其关闭。管理更容易。

答案 3 :(得分:0)

我只想指出那些强调断言一个连接比多个连接更有效或更快的答案......或者反之亦然 ...缺少几个重要问题:

  • 最佳解决方案取决于许多因素,例如:

    • 图像有多大/多小(按照要传输的字节数),

    • 客户端和服务器之间路由的网络带宽和延迟(可能会发生变化)

    • 网络拥堵

    • 服务器负载/过载

  • 您还需要决定是针对单个客户端进行优化,还是针对使用同一应用程序的多个客户端进行优化;即你是否“对该应用程序对其他服务用户的影响”“该死”。


我的直觉是,通过一些连接而不是一个连接,您可能会获得更好的吞吐量。但是,由于网络拥塞和各种客户端/服务器端负载问题的组合,开放更多连接实际上会降低吞吐量。在所有条件下尽可能快地完成这项工作真的非常困难。