【发布时间】:2014-09-22 07:31:56
【问题描述】:
我卡在 java.net.SocketInputStream.socketRead0(Native Method) 上。请看下面的线程转储,这个状态已经3小时了。
Thread-0" prio=10 tid=0x00007facd02a5000 nid=0x309 runnable [0x00007facd4a43000]
java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:150)
at java.net.SocketInputStream.read(SocketInputStream.java:121)
at sun.security.ssl.InputRecord.readFully(InputRecord.java:442)
at sun.security.ssl.InputRecord.read(InputRecord.java:480)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:927)
- locked <0x00000000e34a0428> (a java.lang.Object)
at sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:884)
at sun.security.ssl.AppInputStream.read(AppInputStream.java:102)
- locked <0x00000000e34a0590> (a sun.security.ssl.AppInputStream)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:235)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:275)
at java.io.BufferedInputStream.read(BufferedInputStream.java:334)
- locked <0x00000000e30408b8> (a java.io.BufferedInputStream)
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:633)
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:579)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1322)
- locked <0x00000000e3031d00> (a sun.net.www.protocol.https.DelegateHttpsURLConnection)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)
- locked <0x00000000e3031c80> (a sun.net.www.protocol.https.HttpsURLConnectionImpl)
我已将连接超时和读取超时设置为 URLConnection。请参阅下面的代码 sn-p。所以我不知道为什么它会挂在 java.net.SocketInputStream.socketRead0 上。我只是偶尔会遇到这个问题。任何建议表示赞赏!
public String sendPost(String params) throws Throwable {
PrintWriter out = null;
String htmlContent = null;
try
{
StringBuffer strBuffer = new StringBuffer();
URL url = new URL(this.webUrl);
URLConnection urlConnection = url.openConnection();
urlConnection.setConnectTimeout(3000);
urlConnection.setReadTimeout(3000);
urlConnection.setRequestProperty("accept", "*/*");
urlConnection.setRequestProperty("connection", "Keep-Alive");
urlConnection.setRequestProperty("user-agent", "***");
urlConnection.setDoOutput(true);
urlConnection.setDoInput(true);
out = new PrintWriter(urlConnection.getOutputStream());
out.print(params);
out.flush();
BufferedReader bufferdReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), "utf-8"));
String readLine = null;
try {
while ((readLine = bufferdReader.readLine()) != null) {
strBuffer.append(readLine);
}
} catch (Throwable e) {
return htmlContent;
}
htmlContent = strBuffer.toString();
bufferdReader.close();
【问题讨论】:
-
Connection: keep-alive是默认值。你没有写任何 POST 参数:这是故意的吗? -
感谢@EJP,我只是将更多代码粘贴到代码引用中,这是一个后期操作。请再次查看..
-
您对此有任何更新吗?我也有同样的问题
-
@Hamoriz,抱歉,我们没有很好的解决方案。
-
这个问题的另一个受害者......这个问题肯定有解决方案——这是一个核心Java库。 :-|
标签: java sockets httpurlconnection urlconnection