//ssf是通过getSocketFactory()获得的
socket = (SSLSocket) ssf.createSocket(InetAddress.getByName(host), port);
socket.startHandshake();
//这上面应该没什么问题,因为没有抛出异常try {
Writer out = new OutputStreamWriter(socket.getOutputStream());
BufferedReader in = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
String tmp;
out.write("POST https://" + host + "/omc/xml HTTP/1.1\r\n");
out.write(...)
...
//下面就是读取socket值了
String s = "";
while (! (tmp = in.readLine()).equals("")) {
}
String content = in.readLine();
......
}
catch (IOException ex1) {
ex1.printStackTrace();
return null;
}
catch (NullPointerException ex2) {
ex2.printStackTrace();
return null;
}经过运行产生如下异常:
java.net.SocketException: Software caused connection abort: recv failed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
at com.sun.net.ssl.internal.ssl.InputRecord.readFully(Unknown Source)
at com.sun.net.ssl.internal.ssl.InputRecord.read(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(Unknown Source) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.waitForClose(Unknown Sourc
e)
at com.sun.net.ssl.internal.ssl.HandshakeOutStream.flush(Unknown Source)捕获的那两个异常也有。这里不贴出来了。
哪位分析一下原因呢?并说说解决的方法。
socket = (SSLSocket) ssf.createSocket(InetAddress.getByName(host), port);
socket.startHandshake();
//这上面应该没什么问题,因为没有抛出异常try {
Writer out = new OutputStreamWriter(socket.getOutputStream());
BufferedReader in = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
String tmp;
out.write("POST https://" + host + "/omc/xml HTTP/1.1\r\n");
out.write(...)
...
//下面就是读取socket值了
String s = "";
while (! (tmp = in.readLine()).equals("")) {
}
String content = in.readLine();
......
}
catch (IOException ex1) {
ex1.printStackTrace();
return null;
}
catch (NullPointerException ex2) {
ex2.printStackTrace();
return null;
}经过运行产生如下异常:
java.net.SocketException: Software caused connection abort: recv failed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
at com.sun.net.ssl.internal.ssl.InputRecord.readFully(Unknown Source)
at com.sun.net.ssl.internal.ssl.InputRecord.read(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(Unknown Source) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.waitForClose(Unknown Sourc
e)
at com.sun.net.ssl.internal.ssl.HandshakeOutStream.flush(Unknown Source)捕获的那两个异常也有。这里不贴出来了。
哪位分析一下原因呢?并说说解决的方法。
available
public int available()
throws IOException返回此输入流下一个方法调用可以不受阻塞地从此输入流读取(或跳过)的估计字节数。下一个调用可能是同一个线程,也可能是另一个线程。一次读取或跳过此估计数个字节不会受阻塞,但读取或跳过的字节数可能小于该数。 如果已经调用 close() 方法关闭了此输入流,那么此方法的子类实现可以选择抛出 IOException。
类 InputStream 的 available 方法总是返回 0。 注意最后一句话