2014-12-05 35 views
1

我从Socket.getInputStream()创建的流中读取。当我使用它时,它会阻塞,直到它获得新的数据(正是它应该)。现在我需要流来阅读一些内容(见下文)。但是当我开始一个新的阅读时,它会给我未指定的输出(或不?)。我的问题是:中断阻塞网络IO而不关闭套接字

我该如何中断实际读取,所以我可以使用读取方法?

详情:我连接到服务器并向它发送命令。服务器不时发送消息给我的客户端(事件通知),我需要注册。我希望能够在等待此消息时发送命令。当我发送命令时,将从流中读取对此命令的答案。问题在于:在尝试阅读我的答案时,我仍然在听信息。所以我需要中断当前读取的内容。

+1

当你与阻塞流工作,你需要使用的阅读_separate threads_和写作。 – jtahlborn 2014-12-05 16:55:55

回答

1

停止阅读事件处理器的问题是您引入竞争条件:如果服务器在您终止阅读后立即发送事件会发生什么情况?您阅读的“回复”将被视为事件。

这样做的正确方法是在一个地方完成所有阅读,包括事件和响应,并处理响应,如事件。在你发送一个命令之前,注册一个监听器作为响应,然后发送命令。当阅读线程看到一个响应时,让它找到合适的监听器并通知它已收到响应。

+0

从来没有想过要为命令解析添加一个listerner。我现在关闭了当前线程中的读取内容,并将它们移到了一个侦听器中。感谢您的快速帮助! – kaetzacoatl 2014-12-05 17:35:11