java输入流的问题

时间:2023-02-24 21:42:47
最近用java写一个socket文件接收端,先接收前4个字节文件的大小,但是出现以下错误(如下),请问是哪里出错了?

Exception in thread "main" java.net.SocketException: socket closed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at 智能识别系统客户端.Client.readFileLength(Client.java:95)
at 智能识别系统客户端.Client.TransportFile(Client.java:62)
at 智能识别系统客户端.Client.main(Client.java:112)

//接收文件大小
private int readFileLength(InputStream is) throws IOException
{
byte[] l = new byte[4];
is.read(l);
return b2i(l);
}

2 个解决方案

#1


1 你readFileLength会不会是异步执行在close之后。
2 服务端主动关闭socket.

#2


引用 1 楼 shnulaa 的回复:
1 你readFileLength会不会是异步执行在close之后。
2 服务端主动关闭socket.

1、执行顺序是这样的,不是这问题
          try
{
int length;
length = readFileLength(is); //接收文件大小
readFileContent(is,fos,length); //接收文件
}
finally
{
is.close();
fos.close();
}
2、检查过服务器程序了,服务器没有主动关闭

#1


1 你readFileLength会不会是异步执行在close之后。
2 服务端主动关闭socket.

#2


引用 1 楼 shnulaa 的回复:
1 你readFileLength会不会是异步执行在close之后。
2 服务端主动关闭socket.

1、执行顺序是这样的,不是这问题
          try
{
int length;
length = readFileLength(is); //接收文件大小
readFileContent(is,fos,length); //接收文件
}
finally
{
is.close();
fos.close();
}
2、检查过服务器程序了,服务器没有主动关闭