2013-12-11 102 views
3

我使用Apache DefaultHttpClient与HttpPut使用REST API上传文件。从窗口运行它非常慢,它发送240 kb /秒。但它发送950 kb /秒,当我从MAC运行相同的文件Apache HttpPut请求是从Windows操作系统非常缓慢

我没有任何明确的Windows和Mac OS的条件。

任何人都可以帮助我解决这个问题。

我的代码:

HttpPut putRequest = new HttpPut("http://my.localhost.com:8888"); 
FileEntity reqEntity = new FileEntity("c:/test/test.zip","text/plain"); 
putRequest.setEntity(reqEntity); 
putRequest.addHeader("X-Auth-Token",strToken); 
httpResponse = client.execute(putRequest); 
mResponseCode = httpResponse.getStatusLine().getStatusCode(); 
+0

没有人知道该如何解决? – user2968122

+0

您是否从全新安装尝试验证? – Bart

回答

2

你有Windows机器上运行的防病毒应用程序?尝试先禁用,看看是否有任何区别。

+1

+1。许多AV扫描仪检查所有网络数据包。 –

+0

确实如此。 –

0

我会尝试这个命令。

netsh int tcp set global autotuninglevel=disabled 

如果不有所作为,就重新启用它

netsh int tcp set global autotuninglevel=enabled 

自动调整有时会发生与TCP问题在Windows(和坦白说,我没有任何想法是什么它确实),但它在过去造成了一些类似的问题,所以也许值得一试。很高兴可能是很多事情。

您必须在更改后重新启动tho。

+1

如果你鼓励某人执行一些shell代码,你最好解释它在做什么。 – Bart

+1

当然,当我在这里抱歉时,我倾向于忘记我还在互联网上。 http://www.aip.im/2012/10/how-to-disable-receive-window-auto-tuning-level/ 这是我能在5分钟内找到的最清晰的描述。至于我自己,我在我的个人电脑上运行过这个功能,因为tomshardware上的随机人员告诉我这可能会起作用。它确实做到了,所以做到了这一点。 – alex

+0

在这里,我发现微软的支持页面描述更好一点(而且它也比我之前链接的博客更官方):https://support.microsoft.com/kb/947239 – alex

0

我认为你的问题与NIC的驱动程序有关,而不是Java。

转到开始 - >控制面板 - >设备管理器 - >网络适配器 - >您的网卡,右键单击然后选择属性。

转到高级选项卡。

使用那些特定于您的网卡的设置进行播放,所以我们无法真正帮助您使用确切的设置。您可能有一些名为“Large Send Offload(IPv4)”的内容可以禁用。

这里看到:Slow upload speeds on Windows 7

3

Java是Write once, run anywhere(WORA)。因此,Windows机器上的HTTP连接速度比Mac机器低很多,这与Java无关。

可能有几个Windows机器的问题可能会降低上传速度。我建议你在elevated命令提示符下按顺序运行下面的命令。

要禁用接收端缩放:

netsh interface tcp set global rss=disabled 

要禁用TCP/IP自动调谐:

netsh interface tcp set global autotuninglevel=disabled 

要禁用所有任务卸载:

netsh int ip set global taskoffload=disabled 

更多细节上面的命令可以找到here

如果问题仍然存在,那么你应该

  1. 重新安装用于测试的网络驱动程序。
  2. 用网络引导至安全模式以检查结果。如果工作正常,请检查Clean Boot中的结果,以检查哪个第三方工具影响到此。

Shishir