Chinaunix

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

作者: theoldmemory    时间: 2006-02-07 23:39
标题: [求助]一个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写入文件。

[ 本帖最后由 theoldmemory 于 2006-2-9 19:43 编辑 ]
作者: 艾斯尼勒    时间: 2006-02-07 23:56
我也遇到过类似的问题,我用java写的不管是Socket或者是Url的测试程序传输的时候都相当慢,why?
作者: theoldmemory    时间: 2006-02-09 19:41
原帖由 艾斯尼勒 于 2006-2-7 23:56 发表
我也遇到过类似的问题,我用java写的不管是Socket或者是Url的测试程序传输的时候都相当慢,why?

是啊,还请高手帮忙!
作者: perryhg    时间: 2006-02-09 23:50
你能贴一下你程序的下载代码吗?
作者: 艾斯尼勒    时间: 2006-02-10 14:22
我没有具体写过下载,只是在学习URL和Socket网络编程时候写的。

只是简的url.getInputStream()
然后read过来的
作者: theoldmemory    时间: 2006-02-11 22:14
原帖由 perryhg 于 2006-2-9 23:50 发表
你能贴一下你程序的下载代码吗?

我就是通过httpurlconnection得到inputstream,然后转成buffedinputstream,再通过bufferedoutputstream来读,写入文件的,应该不会有问题吧?
作者: perryhg    时间: 2006-02-12 16:11
我是怀疑这个stream的处理方法在win2000和winxp/2003的底层实现不同。你能不能改用 commons-httpclient来试试看?
作者: theoldmemory    时间: 2006-02-13 22:32
原帖由 perryhg 于 2006-2-12 16:11 发表
我是怀疑这个stream的处理方法在win2000和winxp/2003的底层实现不同。你能不能改用 commons-httpclient来试试看?

commons-httpclient的原理也应该是用这些stream的吧,但是我自己的机器访问别的地址就可以顺利下载的阿~~~
作者: perryhg    时间: 2006-02-14 02:44
IE下载的速度不能说明问题,因为IE内部可能用了某种Buffer机制,我让你用commons-httpclient也是尝试用基于Buffer的IO看看速度又没有提升。我是怀疑Windows 2000系统本身提供了Buffer而XP并没有在这个层次上提供內建的Buffer.
作者: theoldmemory    时间: 2006-02-16 11:52
原帖由 perryhg 于 2006-2-14 02:44 发表
IE下载的速度不能说明问题,因为IE内部可能用了某种Buffer机制,我让你用commons-httpclient也是尝试用基于Buffer的IO看看速度又没有提升。我是怀疑Windows 2000系统本身提供了Buffer而XP并没有在这个层次上提供內 ...

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

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

真的麻烦老大了。
作者: perryhg    时间: 2006-02-16 16:16
xp/2003的内核据说是一样的,但是和2000的不同,看来在你这里体现了,你的问题看上去就是xp/2003互相访问速度很快,但是与2000访问的时候就产生了不同了。你的web服务器是什么?没有解决过这样的案例,所以说不上什么方案,问题可能在更低级的地方,不是简单得用BufferedReader就能影响到的,试试看用nio看看效果怎样?
作者: theoldmemory    时间: 2006-02-17 10:54
原帖由 perryhg 于 2006-2-16 16:16 发表
xp/2003的内核据说是一样的,但是和2000的不同,看来在你这里体现了,你的问题看上去就是xp/2003互相访问速度很快,但是与2000访问的时候就产生了不同了。你的web服务器是什么?没有解决过这样的案例,所以说不上 ...

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




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2