java.net.SocketException: Software caused connection abort: recv failed

allwtg 2009-12-14 12:05:51
//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)

捕获的那两个异常也有。这里不贴出来了。
哪位分析一下原因呢?并说说解决的方法。
...全文
1529 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
swandragon 2009-12-14
  • 打赏
  • 举报
回复
allwtg 2009-12-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 swandragon 的回复:]
http://www.javaeye.com/topic/253123
[/Quote]

available
public int available()
throws IOException返回此输入流下一个方法调用可以不受阻塞地从此输入流读取(或跳过)的估计字节数。下一个调用可能是同一个线程,也可能是另一个线程。一次读取或跳过此估计数个字节不会受阻塞,但读取或跳过的字节数可能小于该数。

如果已经调用 close() 方法关闭了此输入流,那么此方法的子类实现可以选择抛出 IOException。

类 InputStream 的 available 方法总是返回 0。


注意最后一句话

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧