我当时有java服务器和一个客户端。
答案 0 :(得分:0)
我的建议是创建一个ExecutorService并用它启动一个线程。
这里有一个例子:http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html
答案 1 :(得分:0)
正确(但不是最简单)的方法是使用java.nio.channels.SocketChannel
。它的read
方法读入ByteBuffer
。您可以将它与java.nio.channels.Selector
结合使用,以便在不阻塞的情况下从多个套接字中读取(选择器可帮助您找出哪些数据库可用)但在您的情况下,您可能只对SocketChannel
感到满意。
使用起来要困难得多 - 没有InputStream
,您需要管理ByteBuffer
。
另一种方法是启动监视程序Thread
,该监视程序在超时期间休眠,如果客户端尚未发送PIN,则关闭Socket
。关闭套接字会中断被阻止的读卡器。
如果你想这样做,有些老问题可以帮助你使用SocketChannel:
答案 2 :(得分:0)
服务器应始终使用读取超时。您可以在第一次请求和回复后更改它。