蓝森林首页 | 返回主页 | 本站地图 | 站内搜索 | 联系信箱 |
 您目前的位置:首页 > 自由软件 > 技术交流 > 应用编程


    

蓝森林 http://www.lslnet.com 2006年6月6日 10:18


[求助]一个HTTP下载的奇怪现象,高手版主们bjchenxu, sakulagi, 猫小, perryhg受累!

一个很奇怪的问题,现象是这样的:
使用同一段代码,在我们公司内部局域网中,我在a机上去下载c机的文件(http)协议,速度相当慢,每秒几百个字节,但我在b机上下载c机相同的文件,速度却很快。a,b,c,分别是不同的网段,a机是xp系统,b机是2000系统,在a机上通过ie直接访问文件地址,下载速度也很快。一开始我怀疑是否和网段有关,于是我就在与b机的同一个网段的2003的机器上使用,速度也很慢,但在同一网段的2000机器就是很快,说明应和网络无关。接着,我在a机上用同样的程序下载b机上的文件,速度也很正常,说明和操作系统应该也没关系。由于用IE打开下载速度正常,我就找不到个原因了,还请各位高手帮忙诊断!谢谢啦,由于很奇怪,所以心里很急。

另外说一下我代码的写法,就是通过httpurlconnection的connect方式,然后getinputstream在通过bufferedinputstream来read文件字节,再使用bufferedoutputsream写入文件。


我也遇到过类似的问题,我用java写的不管是Socket或者是Url的测试程序传输的时候都相当慢,why?

-->
是啊,还请高手帮忙!

你能贴一下你程序的下载代码吗?

我没有具体写过下载,只是在学习URL和Socket网络编程时候写的。

只是简的url.getInputStream()
然后read过来的

-->
我就是通过httpurlconnection得到inputstream,然后转成buffedinputstream,再通过bufferedoutputstream来读,写入文件的,应该不会有问题吧?

我是怀疑这个stream的处理方法在win2000和winxp/2003的底层实现不同。你能不能改用 commons-httpclient来试试看?

-->
commons-httpclient的原理也应该是用这些stream的吧,但是我自己的机器访问别的地址就可以顺利下载的阿~~~

IE下载的速度不能说明问题,因为IE内部可能用了某种Buffer机制,我让你用commons-httpclient也是尝试用基于Buffer的IO看看速度又没有提升。我是怀疑Windows 2000系统本身提供了Buffer而XP并没有在这个层次上提供內建的Buffer.

-->
首先谢谢老大的解释,不过我的意思是我在xp下用我的程序去下载别的服务器的文件,速度也很快,而且我程序就是用BufferedI/O来写的,所以应该不是这个问题吧,很奇怪吧。

我还是在具体说下情况:
程序在网段1下的xp下访问网段2下的a地址出奇的慢,但网段3下的2000下访问快,但网段3下的2003也出奇的慢,然后我用网段1下的xp去访问网段3下的地址b却也很快,因此应该程序没有问题,但由于我在xp下用IE去下载地址a,速度也很快,所以就推倒不出一个原因了,活活。

真的麻烦老大了。

xp/2003的内核据说是一样的,但是和2000的不同,看来在你这里体现了,你的问题看上去就是xp/2003互相访问速度很快,但是与2000访问的时候就产生了不同了。你的web服务器是什么?没有解决过这样的案例,所以说不上什么方案,问题可能在更低级的地方,不是简单得用BufferedReader就能影响到的,试试看用nio看看效果怎样?

-->
老大说的方法,我也会去试一下,我不知道web服务器是什么系统的,不过“然后我用网段1下的xp去访问网段3下的地址b却也很快”地址b的服务器是2000的。



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 蓝森林网站 版权所有。 E-mail : webmaster@lslnet.com