【发布时间】:2012-09-10 02:16:50
【问题描述】:
可能重复:
java.net.SocketException: Software caused connection abort: recv failed
我正在尝试编写一个客户端服务器对,其中连接整天处于活动状态,客户端等待服务器发送消息。步骤是:
- 服务器打开端口并监听连接
- 客户端连接并等待数据
- 一段时间后(可能是几个小时),服务器将数据发送到客户端
- 客户端处理数据并将其返回给服务器
- 重复步骤 3 和 4
我可以让步骤 1-4 工作,但是如果我尝试重复步骤 3,我会在标题中收到错误。
这是我在客户端的方法:
private static void waitForInput(SSLSocket sslsocket) throws IOException {
do {
try {
ObjectInputStream ois = new ObjectInputStream(sslsocket.getInputStream());
ObjectOutputStream oos = new ObjectOutputStream(sslsocket.getOutputStream());
Object o = (Object) (ois.readObject());
// excluded code to process data
oos.flush();
oos.writeObject(o);
oos.reset();
}
catch(ClassNotFoundException e){
System.err.println(e.getMessage());
}
} while ( true );
}
代码在第 4 行失败,第一次它阻塞并等待直到我得到下一位数据,但它没有工作两次。我做错了什么?
【问题讨论】:
-
什么是“第四行”?它以什么方式失败?你只是说它“不起作用”。
-
从字面上看,我上面的代码中的第 4 行
ObjectInputStream ois = new ObjectInputStream(sslsocket.getInputStream());我得到的错误是标题中的错误 - 'java.net.SocketException:软件导致连接中止:recv failed'