【发布时间】:2017-09-13 13:13:08
【问题描述】:
我在下面发布的代码适用于通过套接字传输单个文件。但它不适用于通过套接字进行的多个文件传输。当尝试通过套接字传输多个文件时,代码会崩溃。
我通过在服务器上循环发送代码 x 次来发送多个文件,并运行接收代码 x 次。尝试发送多个文件时,第一个文件将成功发送,第二个文件名和大小将成功读取,但此后发生我的代码中的错误。
在我的接收客户中,我尝试使用此处发布的建议:Java multiple file transfer over socket 但没有成功。
错误在客户端。
我要问的问题是:为什么这段代码不能用于多个文件,我该如何解决?
服务器发送
try{
byte[] bytes = new byte[(int)file.length()];
FileInputStream fis = new FileInputStream(file);
OutputStream os = socket.getOutputStream();
out.println(file.getName()); // Send Filename
out.println(file.length()); // Send filesize
int count;
while ((count = fis.read(bytes)) > 0) {
os.write(bytes, 0, count);
}
os.flush();
fis.close();
}catch(IOException e){
e.printStackTrace();
}
}
客户接收
try{
String file = in.readLine(); // Read filename
int fileSize = Integer.parseInt(in.readLine()); // Read Filesize
//ERROR HAPPENING ON LINE ABOVE IN LOOPS AFTER THE FIRST
byte [] buf = new byte [fileSize];
FileOutputStream fos = new FileOutputStream(file);
InputStream is = socket.getInputStream();
int count = 0;
while (fileSize > 0 && (count = is.read(buf, 0, (int)Math.min(buf.length, fileSize))) != -1){
fos.write(buf, 0, count);
fileSize -= count;
}
fos.close();
}catch(IOException e){
e.printStackTrace();
}
错误是 NumberFormatException,在客户端接收文件的一部分以输入到 fileSize 之后的第一个循环。
【问题讨论】:
-
当您说“我的代码中的错误发生在此之后”时,请同时在此处添加该错误,这样我们就无需猜测数百个可能的错误中的哪一个。
-
你有异常跟踪吗?
-
@M.Prokhorov 添加在我的帖子底部。
-
发布异常堆栈跟踪。还要指出你的代码中的哪一行是用评论轰炸的
-
在您的“服务器发送”部分,
out指的是什么?
标签: java file sockets stream transfer