黑马程序员技术交流社区

标题: 急急急,十万火急求大神解决 [打印本页]

作者: boboyuwu    时间: 2015-10-17 10:57
标题: 急急急,十万火急求大神解决
try {                       
            System.out.println(3);
            oos=new ObjectOutputStream(client.getOutputStream());
            sperson sp=new sperson();
            System.out.println(4);
            sp.setName("aaaaaaaaaaaaaaaa");
            oos.writeObject(sp);
            oos.flush(); }
            catch (IOException e) {
            System.out.println("客户端错误2"+e.getMessage());}        


为什么不关闭oos就会报出异常   connect reset加上这个才能正常发送出去
       /* finally{
                         try{
                                 if(oos!=null)
                                         oos.close();
                         }
                         catch(IOException ex){
                                 
                         }}*/

作者: rzx    时间: 2015-10-18 23:52
好    难
作者: Coolman    时间: 2015-10-19 11:20
该异常在客户端和服务器端均有可能发生,引起该异常的原因有两个:
第一个就是如果一端的Socket被关闭(或主动关闭或者因为异常退出而引起的关闭),另一端仍发送数据,发送的第一个数据包引发该异常(Connect reset by peer)。
另一个是一端退出,但退出时并未关闭该连接,另一端如果在从连接中读数据则抛出该异常(Connection reset)。简单的说就是在连接断开后的读和写操作引起的。
作者: daiqingming    时间: 2015-10-19 20:27
如果不调用close方法关闭,首先占用的硬件资源被浪费,其次数据可能无法像预期的那样正确输出到文件,可能出现空白文件或者数据输出不完整的情况。此外,由于文件对象未关闭,你仍然可能对它进行操作,误操作的话会给调试惹不少麻烦,也有可能成为一种不安全因素。  一般和file的读取后需要关闭一样的道理,清理缓存的作用,还有不浪费资源的作用。
作者: 徐慧shanghai    时间: 2015-10-21 09:38
首先要知道为什么要弄清几个东西
第一   ObjectOutputStream   干什么用的   ?它是将一个对象写入文件中,可能代码里并没有看到文件 但是,如果要使用这个方法 sperson sp=new sperson();  你这个类必须实现 Serializable 接口,Serializable是什么呢?序列化接口,其实就是将一些东西暂存为文件。
然后,既然是写一个文件 ,虽然你前面flush 了,但是,程序不能确定文件就写完了,可以想象,它可能有个FileOutPutStream 类似的东西,文件流没有 close  那么也就不会去发送,所以,只有当你把文件close 了,才认为你之前的已经一切准备就绪了,那么可以把这个序列化的东西发送出去了      

一些是个人猜测,但是应该是这样的
作者: wx_xO9vSwPo    时间: 2015-10-25 11:49
oh,,,,,,,,
作者: 香港胖仔    时间: 2015-10-26 18:54
oos=new ObjectOutputStream(client.getOutputStream());
因为oos封装的是一个OutputStream对象如果不关闭则服务端就一直在等待客户端的输入
除非你写上shutDownOutput();
作者: 许佳鑫    时间: 2015-11-5 15:17
首先流用完以后关闭时避免资源浪费,你要知道java中流是一种很昂贵的资源,这个楼上都讲了。
再一个你这个贴个半拉子的程序出来让别人也不太好回答。Connection reset错误不是出在流未关闭上。
作者: 帮助信息    时间: 2015-11-9 23:46
dou都是大神  大神,,,,,  你得关掉,会浪费资源,并出错。那个flush是刷新功能。你不刷新他就一直缓存着,不会输出不会啥的  就一直运行。不过直接用一个close就行 flush不用也可以
作者: 袁有福123    时间: 2015-11-21 12:35
感觉好难啊   个人觉得应该资源用过后都要关闭吗  不然会占用空间




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2