首页 > 编程语言 >Java Socket IO流关闭问题: Exception in thread "main" java.net.SocketException: Socket is closed

Java Socket IO流关闭问题: Exception in thread "main" java.net.SocketException: Socket is closed

时间:2023-09-05 17:22:52浏览次数:61  
标签:SocketException Exception Socket BufferedReader socket 关闭 closed

先说结论

问题: 明明执行的语句在socket.close前, 却出现Exception in thread "main" java.net.SocketException: Socket is closed报错
结论: 在Java中关闭一个包装流会导致它的底层流也被关闭所以一般使用socket.shutdownOutput()socket.shutdownInput()关闭对应的流

问题复现

最近在学习Socket, 做了一个"Client发送文件名, Server回复文件"的Demo, 并编写了一个将InpuStream转为String的工具类, 代码如下:

public static String streamToString(InputStream is) throws IOException {
      BufferedReader reader = new BufferedReader(new InputStreamReader(is));
      StringBuilder stringBuilder = new StringBuilder();
      String line;
      while ((line = reader.readLine()) != null) {
          stringBuilder.append(line);
      }
      reader.close();  /* 罪魁祸首 */
      return stringBuilder.toString();
  }

在执行Server时, 收到Client传来的文件名(使用上面提到的工具类获取)后, 再次调用socket.getOutputStream()出现了Socket is closed异常;

经过排查发现是在工具类中直接将BufferedReader关闭了, 由于BufferedReader是一个包装流, 导致关闭它时它的底层流也会被关闭, 就出现了Socket is closed异常.

标签:SocketException,Exception,Socket,BufferedReader,socket,关闭,closed
From: https://www.cnblogs.com/ahci316/p/17680234.html

相关文章

  • dotnet 记 TaskCompletionSource 的 SetException 可能将异常记录到 UnobservedTaskEx
    本文将记录dotnet的一个已知问题,且是设计如此的问题。假定有一个TaskCompletionSource对象,此对象的Task没有被任何地方引用等待。在TaskCompletionSource被调用SetException或TrySetException方法时,将会记录一个存在异常且未捕获的Task对象。此Task对象将会在被G......
  • SpringBoot项目报java.lang.IllegalStateException: Cannot load configuration class
    报错摘要:java.lang.IllegalStateException:Cannotloadconfigurationclass:com.imooc.demo.DemoApplication,Causedby:java.lang.ExceptionInInitializerError:null,Causedby:org.springframework.cglib.core.CodeGenerationException:java.lang.reflect.I......
  • Socket.io入门
    Socket.io入门根据官方文档socket.io使用必须客户端根服务端一致,socket.io不兼容webSocket或者其他模块,因为socket.io在连接时做了自定义处理,所以不同的长连接npm模块并不互通首先安装npm包:客户端(vue):npmisocket.io-client@4.7.2服务端(express):npmisocket.io@4......
  • Caused by: java.sql.SQLSyntaxErrorException: ORA-00923: 未找到要求的 FROM 关键字
    最终是,查询条件,入参为null,所导致。JDBCgetParameterTypecallfailed-usingfallbackmethodinsteadRA-00923:FROMkeywordnotfoundwhereexpected 进一步,这个错误,在job执行的时候,会导致,oracle游标不够ORA-01000maximumopencursorsexceeded   参考: ......
  • maven-resources-production:webapi: java.lang.NegativeArraySizeException
    maven-resources-production:webapi:java.lang.NegativeArraySizeException打开项目启动时,发现报这个错误,基于此,我分析了一下,首先原本好好的项目突然这样子,首先查看代码更新的情况,发现代码并没有作任何变化。分析代码jar包的问题,首先mvnclean和mvninstall直接一起上。代码可......
  • Failed to start bean 'documentationPluginsBootstrapper'; nested exception is jav
    2023-09-0322:53:53.622WARN20788---[main]ConfigServletWebServerApplicationContext:Exceptionencounteredduringcontextinitialization-cancellingrefreshattempt:org.springframework.context.ApplicationContextException:Failedtostartbean......
  • 如何正确实现一个自定义 Exception
    最近在公司的项目中,编写了几个自定义的Exception类。提交PR的时候,sonarqube提示这几个自定义异常不符合ISerializablepatten.花了点时间稍微研究了一下,把这个问题解了。今天在此记录一下,可能大家都会帮助到大家。自定义异常编写一个自定义的异常,继承自Exception,其中定......
  • .NetCore——全局异常过滤器ExceptionFilterAttribute
    .NetCore——全局异常过滤器ExceptionFilterAttribute一、介绍在我们的项目运行中,当程序出现异常的时候就会弹窗大黄页,所以为了更方便的解决这个问题,我们采用全局过滤器ExceptionFilterAttribute。通过它主动捕获程序中的异常,然后经过处理再抛出信息。下面咱们直接上干货,撸起来......
  • Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: The
    这个错误表明在尝试获取JDBC连接时发生了SQLException,并且该异常表示服务器不识别或不包含一个以上的时区。以下是一些可能的解决方法:确认服务器时区设置:确保你的服务器时区设置正确。你可以在数据库中运行以下查询来检查当前时区设置:sqlSELECT@@全球化设置(‘TzSystem’);如......
  • c# socket tcp 通信 结构体 字节流 大端序列 小端序列
    SeerAGV_2/SeerMessage.csusingSystem.Reflection;usingSystem.Runtime.InteropServices;namespaceSeerAGV{publicstructSeerMessageHead{publicbytesync;publicbyteversion;publicushortnumber;publicuintl......