我设置了socket的超时时间,并用一个Scanner读取Socket数据:
sock.setSoTimeout(5000);
Scanner in = new Scannner(sock.getInputStream());然后主要读取过程是这样的:
try{
in.nextLine();
}catch(NoSuchElementException ex) {
ex.printStrack();
}问题是当出现一次读取超时并捕捉到NoSuchElementException 异常之后,下次即使有数据可读了,in.nextLine()也会直接返回null.请问这是为什么,怎么解决呢?
sock.setSoTimeout(5000);
Scanner in = new Scannner(sock.getInputStream());然后主要读取过程是这样的:
try{
in.nextLine();
}catch(NoSuchElementException ex) {
ex.printStrack();
}问题是当出现一次读取超时并捕捉到NoSuchElementException 异常之后,下次即使有数据可读了,in.nextLine()也会直接返回null.请问这是为什么,怎么解决呢?
不妨试一下。
我曾试过在异常里添加这样的代码:in = Scanner(sock.getInputStream());
重新new一个Scanner是可以的。
但是为什么原来的就不行了呢?
然后做read操作才有校
也就是说Server端的socket的输出流已经关闭了.
JAVA应该道理也差不多,虽然没有析构函数,但是自动的资源处理还是应该有的