Socket编程问题小记

在socket编程中,若是在一个while循环中使用:编程

ObjectInputStream reader = new ObjectInputStream(socket.getInputStream);
reader.readObject();

可能会出现EOFException,
看了网上的不少答案和解释,以为都不对,网上都说是由于已经到达文件末尾了,而reader还在读取数据,因此在报错
其实,这是不对的,在循环中调用它本没有错,在while循环中若是没有数据可读了,它会自动阻塞,有数据来的时候就会读,因此在这种状况下根本不会出现socket

到达文件末尾了,而reader还在读设计

的问题,那么出现这种状况的缘由是什么呢?
实际上是代码业务逻辑的问题,致使reader在读的时候,socket被关闭,reader被关闭,链接被关闭等等,因此彻底是代码设计的问题,code

另外在使用ObjectOutputStreamObjectInputStream的时候要注意一个问题,这二者建立的顺序须要遵循必定的约定,ObjectInputStream的建立须要ObjectOutputStream建立后的一些数据,因此它通常在ObjectOutputStream以前。建立好ObjectOutputStream以后,还会先向流中先写入4个字节的数据,建立ObjectInputStream的时候会相应的将其读出来,因此,不能屡次建立ObjectOutputStream,由于这会致使屡次写入数据,get

相关文章
相关标签/搜索