问题描述
写法1:try{while(connect){//控制循环结束,初始为trueStringstr=dis.readUTF();System.out.println(str);}}catch(EOFExceptione){System.out.println("客户端断开连接");}catch(IOExceptione){System.out.println("接收错误");e.printStackTrace();}finally{stop();//将connect值设为false,并且关闭流和套接字}写法2:while(connect){try{Stringstr=dis.readUTF();System.out.println(str);}catch(EOFExceptione){System.out.println("客户端断开连接");}catch(IOExceptione){System.out.println("接收错误");e.printStackTrace();}finally{stop();}}请问这两种写法为什么执行效果完全不一样,第一种就会得到正确的结果,而第二种的Stringstr=dis.readUTF();这句话就会抛出DataInputStream.readUTF(UnknownSource)的异常?先谢谢大家啦
解决方案
解决方案二:
while(connect){try{Stringstr=dis.readUTF();System.out.println(str);}catch(EOFExceptione){System.out.println("客户端断开连接");}catch(IOExceptione){System.out.println("接收错误");e.printStackTrace();}finally{stop();}}
一次循环你就stop了,stop是不是把io关了?
解决方案三:
就是ls说的
解决方案四:
引用1楼shaosijun2004的回复:
Javacodewhile(connect){try{Stringstr=dis.readUTF();System.out.println(str);}catch(EOFExceptione){S……
up
解决方案五:
该回复于2010-12-17 13:20:08被版主删除
解决方案六:
第一个while是在try内,也就是说当真的时候一直会循环while里面的内容。第二个while是包含try的,也就是说执行了一次之后,就跑到finally去了,也就stop了,然后也就宣告结束了。。。。
解决方案七:
学到了,我也犯了这个错误
解决方案八:
第二种写法,循环体里面finally里面的close方法,应该是将IO流或者Socket关闭了。后面的循环,在进行读操作,肯定会抛出异常。