我正在查看创建线程来处理每个传入连接的服务器的代码。问题是由于某种原因在一堆线程上,从套接字创建的 DataInputStream 卡在 readByte 上并且没有抛出任何异常。超时设置为 60 秒,所以我不确定下一步是什么。
socket.setSoTimeout(timeout);
socketInputStream = socket.getInputStream();
byte connectionOptions = socketDataInputStream.readByte();
最佳答案
您在评论中指出您正在等待 SocketException
。如果是这样,您需要改为捕获 SocketTimeoutException
。例如,如果您 telnet 到端口 3434 并等待 3 秒,此代码将输出 timeout!
:
try {
ServerSocket ss = new ServerSocket(3434);
Socket socket = ss.accept();
socket.setSoTimeout(3000);
InputStream socketInputStream = socket.getInputStream();
DataInputStream dataInputStream = new DataInputStream(socketInputStream);
dataInputStream.readByte();
} catch (SocketTimeoutException e) {
System.out.println("timeout!");
}
关于java - DataInputStream readByte 阻塞/挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5337272/