【问题标题】:Java sockets and TCP tuningJava 套接字和 TCP 调优
【发布时间】:2009-09-22 02:50:40
【问题描述】:

我尝试用 Java 开发一个文件传输应用程序,其中一个小程序作为客户端,一个独立的 Java 应用程序作为服务器(在托管在数据中心的专用机器上)。 我使用 DataOutputStream/DataInputStream 来传输双方的数据。 当我发送大量数据时,带宽变化很大:首先一切正常,然后在 40-50 秒内冻结 tcp 流而没有任何传输,然后重新开始。

当我使用 Ethereal 查看 tcp 流时,我看到重复的确认、快速重传和 tcp 重传。 但我不认为问题源于 Java:我在 FileZilla 中的 FTP 传输也有同样的问题。 但是......当我尝试使用netcat(netcat客户端+netcat服务器)传输数据时,一切都很好,带宽稳定,tcp丢失的数据包似乎立即重新传输,没有任何暂停,无论传输的量如何。

这就像 Java 在玩 tcp 流方面没有 netcat 那样有天赋......

我尝试使用 Socket.setSendBufferSize(),但没有发现任何区别。 有什么想法吗?

谢谢! 对不起我的英语不好......

【问题讨论】:

标签: java tcp sockets stream netcat


【解决方案1】:

amischiefr 先生是对的! 这与另一个线程上的问题相同。 通过用 BufferedXXXputstream 替换 DataXXXputStream 解决了我的问题。 write(byte[], off, len) 方法是相同的,文档没有谈论这种不同的行为。 DataOutputStream 是缓冲的,BufferedOutputStream 也是,但第二个做得更好。 谢谢!

【讨论】:

    【解决方案2】:

    听起来更像是您的网络陷入困境并且您看到 TCP 窗口(我相信这是正确的术语)基本上限制了您的带宽。

    【讨论】:

      猜你喜欢
      • 2012-08-23
      • 1970-01-01
      • 2011-08-07
      • 2010-10-10
      • 2017-08-10
      • 1970-01-01
      • 2020-11-30
      • 2013-05-21
      • 2010-10-14
      相关资源
      最近更新 更多