我们有下一个代码 有时我们应该在最后一行等待10-20-40秒 可能是什么问题?
Java 1.4
URL url = ...;
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.connect();
OutputStream out = conn.getOutputStream();
ObjectOutputStream outStream = new ObjectOutputStream(out);
try
{
outStream.writeObject(objArray);
}
finally
{
outStream.close();
}
InputStream input = conn.getInputStream();
更新:
下一个代码修复了ECLIPSE中的问题
但它仍然无法通过Java WebStart工作:(
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
System.setProperty("http.keepAlive", "false"); //<---------------
conn.connect();
但为什么?
再次更新!
Bug被修复了! :)
我们使用的连接不是在一个班级而是在两个班级
第二类中有以下几行:
URL url = ...
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestProperty("Content-Length", "1000"); //<------------
conn.connect();
注意:
setRequestProperty("Content-Length", "1000")
是问题的根本原因。
答案 0 :(得分:10)
'我们有一个类似的问题,这是由旧Java中的bug-alive-alive引起的。在连接之前添加它以查看它是否有帮助,
conn.setRequestProperty("Connection", "close");
或
System.setProperty("http.keepAlive", "false");
答案 1 :(得分:4)
遇到同样的问题,发现它是由IPv6造成的。
您可以使用以下代码从代码中禁用它:
System.setProperty("java.net.preferIPv4Stack" , "true");
您也可以使用以下命令行禁用它:g-Djava.net.preferIPv4Stack=true
答案 2 :(得分:2)
尝试使用IP地址。要查看它是否是DNS问题。
答案 3 :(得分:2)
我遇到了同样的问题,所以我从Apache改为HTTPClient,举个例子:
HttpClient httpClient = HttpClientBuilder.create().build();
HttpPost request = new HttpPost("www.myurl-to-read");
RequestConfig requestConfig = RequestConfig.custom()
.setSocketTimeout(8000)
.setConnectTimeout(10000)
.setConnectionRequestTimeout(1000)
.build();
request.setConfig(requestConfig);
request.setHeader("Content-type", "application/json");
HttpResponse response = httpClient.execute(request);
HttpEntity entity = response.getEntity();
String result = EntityUtils.toString(entity, "UTF-8");
答案 4 :(得分:1)
问题可能来自网络子层...应该很难找到它。
但是setReadTimeOut()
具有低值和while循环呢?
答案 5 :(得分:1)
我猜想有一件事是您的DNS服务器没有很好的响应。
您可以尝试在开始之前将符号域名更改为数字IP地址吗?或者您可以两次执行每个请求(仅用于实验)并查看第一个请求是否明显慢于第二个请求?
Google已经在(其中包括)8.8.8.8中建立了DNS服务器。他们声称它比大多数其他DNS服务器更快。试一试!