我正在实施两个程序;客户端和服务器,客户端向服务器请求文件以下载到本地文件系统中。
下载一个文件后,如果客户端愿意,它应该能够下载另一个文件。
但是,在下载文件后,服务器给了我一个异常说
java.net.SocketException: Socket closed
这是我的代码..
客户:
byte[] aByte = new byte[0];
int bytesRead;
String msg;
FileOutputStream fos = null;
BufferedOutputStream bos = null;
while (!(msg = input.readLine()).equals("end")) {
String myFolderName = "ServerFolder";
File folder=new File(myFolderName);
if (!folder.exists()){
folder.mkdir();
}
System.out.println("file downloading");
try {
System.out.println("1");
fos = new FileOutputStream("ServerFolder/"+fileToDownload);
bos = new BufferedOutputStream(fos);
System.out.println("MSG: "+msg);
bytesRead = in.read(aByte, 0, aByte.length);
System.out.println("2");
do {
baos.write(aByte);
bytesRead = in.read(aByte);
} while (bytesRead != -1);
System.out.println("3");
bos.write(baos.toByteArray());
bos.flush();
} catch (IOException ex) {
System.err.println(ex.getMessage());
}
}
bos.close();
} catch (IOException ex) {
System.err.println(ex);
}
服务器:
if (outToClient != null) {
System.out.println("2");
File myFile = new File(msg);
byte[] mybytearray = new byte[(int) myFile.length()];
try {
fis = new FileInputStream(myFile);
} catch (FileNotFoundException ex) {
// Do exception handling
}
System.out.println("3");
bis = new BufferedInputStream(fis);
try {
bis.read(mybytearray, 0, mybytearray.length);
System.out.println("mybytearray.length: "+(int) myFile.length());
out.write((int) myFile.length()+"\r\n");
out.write("end\r\n");
out.flush();
outToClient.write(mybytearray, 0, mybytearray.length);
outToClient.flush();
s.shutdownOutput();
outToClient.close();
System.out.println("4");
} catch (IOException ex) {
System.out.println("5");
System.err.println(ex);
}
(所有连接的东西都在每个方法的开头完成)
我有
s.close();
在服务器中但我删除了它以防万一它导致错误但它不是..
我假设
outToClient.close();
也不是造成的?...
我也用谷歌搜索了这个问题,有些人建议在服务器发送文件之前告诉客户端文件的大小..但效果不佳..所以我也删除了那部分(或者我做错了..)
谢谢:)