我尝试用Java开发文件传输应用程序,将applet作为客户端,将独立的Java应用程序作为服务器(在数据中心托管的专用计算机上)。 我使用DataOutputStream / DataInputStream来传输双方的数据。 当我发送大量数据时,bandwith变化很大:首先一切正常,然后tcp流在40-50秒内冻结,而没有任何转移,然后再次启动。
当我用Ethereal查看tcp流时,我看到重复的acks,快速重传和tcp重传。 但我不认为问题源于Java:我在FileZilla中的FTP传输问题也一样。 但是......当我尝试使用netcat(netcat客户端+ netcat服务器)传输数据时,一切都很好,带宽稳定,tcp丢失的数据包似乎无需任何暂停即可立即重传,无论传输的音量如何。 / p>
就像Java不像netcat那样有天赋来玩tcp流......
我尝试使用Socket.setSendBufferSize(),但我没有看到任何区别。 有什么想法吗?
谢谢! 抱歉我的英语不好......
答案 0 :(得分:1)
amischiefr先生是对的! 这与另一个线程上的问题相同。 通过BufferedXXXputstream替换DataXXXputStream解决了我的问题。 write(byte [],off,len)方法是相同的,doc没有谈论这种不同的行为。 DataOutputStream也是缓冲的,BufferedOutputStream也是,但第二个做得更好。 谢谢!
答案 1 :(得分:0)
听起来更像是你的网络陷入困境,你看到TCP窗口(我认为这是正确的术语)基本上限制了你的带宽。