2012-07-23 68 views
2

我正试图在java中创建一个相当简单的客户机/服务器应用程序。客户端有两个线程,服务器有两个线程(每个客户端),一个用于输入和输出。我通过Object Streams几乎不断地发送数据。读取()块。我需要能够中断read()线程(即断开连接)。我该怎么做呢?可中断套接字读取Java

+0

认为这[链接](http://www.roseindia.net/javatutorials/shutting_down_threads_cleanly.shtml)实际上可以帮助你。 – Jasonw 2012-07-23 01:33:53

+0

你有没有尝试使用非阻塞读取插座?还有一个循环来不断检查一个条件,以便当你需要断开连接时,你可以在非阻塞读取返回后断开连接?您可以使用NIO或setSoTimeout来创建一个非阻塞套接字。 – 2012-07-23 02:50:58

回答

1

只需关闭包装在套接字上的输出流即可。如果这也阻止了您的平台,请使用读取超时并让读卡器在每次跳闸时检查断开连接标志。

1

关闭Socket,并且read方法将被中断IOException。处理这个异常来清理你的线程。

0

您可以使用非阻塞呼叫或在线程上使用Interrupt method。一旦中断,读操作将抛出一个异常,你可以捕捉并很好地结束线程。

+1

只有套接字是InterruptibleChannel时,这才是真的。 – EJP 2012-07-24 02:27:25