IO阻塞时怎么检查判定循环flag变量的值啊?
public static void main(String[] args) throws IOException{
serverSocket = new ServerSocket(9001);
Socket socket = serverSocket.accept();
PrintWriter printWriter = new PrintWriter(socket.getOutputStream(),true);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedReader typing = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Connected to client");
new Thread(new Runnable() {
@Override
public void run(){
while(!endOfSession){
try{
//就是这里,当用户输入over时,直接结束本次会话。但是readLine()会阻塞直至控制台输入换行符,然后才能检查///endOfSession,有什么办法当endOfSession变为true时直接跳出循环的吗?
String line = typing.readLine();
printWriter.println("Server: "+line);
}
catch (IOException e){
}
System.out.println("Enter input finished");
}
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
while(true){
try{
String info = bufferedReader.readLine();
if(info!=null)
System.out.println(info);
else break;
}
catch (IOException e){
endOfSession = true;
System.out.println("The socket is closed!");
break;
}
}
}
}).start();
}
我写的一个简单地对socket对话程序,服务器端和客户端代码几乎没区别。服务器accept()后,创建两个线程,一个不断从键盘读标准输入并打印给客户端,另一个不断从socket读输入打印到控制台。当客户端断开连接时,第二个线程可以直接over,并改变第一个线程循环条件变量的值,但是第一个线程始终在等待用户输入,只有输入换行符后,才会再判端循环条件。有什么办法让线程一在等待用户输入时也可以得知socket已经关闭了吗?