Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
被困在java.net.SocketInputStream.socketRead0(本机方法)上_Java_Sockets_Httpurlconnection_Urlconnection - Fatal编程技术网

被困在java.net.SocketInputStream.socketRead0(本机方法)上

被困在java.net.SocketInputStream.socketRead0(本机方法)上,java,sockets,httpurlconnection,urlconnection,Java,Sockets,Httpurlconnection,Urlconnection,我在java.net.SocketInputStream.socketRead0(本机方法)上遇到了问题。请参见下面的线程转储,它已处于此状态3小时 Thread-0" prio=10 tid=0x00007facd02a5000 nid=0x309 runnable [0x00007facd4a43000] java.lang.Thread.State: RUNNABLE at java.net.SocketInputStream.socketRead0(Native Method)

我在java.net.SocketInputStream.socketRead0(本机方法)上遇到了问题。请参见下面的线程转储,它已处于此状态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的一个bug。使用套接字和超时进行检查。

我今天在我们的系统上发现了同样的错误。这是JDK中的一个bug,由java中使用的本机实现引起。已于2016年9月21日修复,因此应在以后的JDK版本中提供

这就是错误:

如果你迫不及待,似乎有人创造了一个解决办法:
连接:保持活动状态
是默认设置。您没有编写任何POST参数:这是故意的吗?谢谢@EJP,我只是将更多代码粘贴到代码引用中,这是一个POST操作。请再看一次。你对此有任何更新吗?我有完全一样的problem@Hamoriz,抱歉,我们没有很好的解决方案。这个问题的另一个受害者。。。这个问题肯定有解决方案——这是一个核心Java库:-|
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();