2

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

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

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

我尝试使用 Socket.setSendBufferSize(),但我没有看到任何区别。任何想法 ?

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

4

2 回答 2

1

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

于 2009-09-21T18:50:40.183 回答
0

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

于 2009-09-21T17:49:48.450 回答