【发布时间】:2014-06-07 03:44:38
【问题描述】:
我编写了一个代码,将文件从一台计算机发送到另一台计算机, 问题是,在发送后它不再工作了。 我知道问题出在我给作者写信时,但我不知道为什么它不起作用。
客户:
File file =new File(path);
long fileSize = file.length();
long completed = 0;
int step = 150000;
Request req = new Request(RequetType.DOWNLOAD_FILE,file.getName());
writer.writeObject(req);
writer.flush();
// creates the file stream
FileInputStream fileStream = new FileInputStream(file);
// sending a message before streaming the file
// writer.writeObject("SENDING_FILE|" + file.getName() +"|" + fileSize);
writer.reset();
byte[] buffer = new byte[step];
while (completed <= fileSize) {
fileStream.read(buffer);
writer.write(buffer);
completed += step;
}
System.out.println(completed);
//writer.writeObject("SEND_COMPLETE");
fileStream.close();
服务器:
String filename = (String)req.getContent();
try {
FileOutputStream outStream =new FileOutputStream(Startdir+""+filename);
byte[] buffer = new byte[200000];
int bytesRead = 0, counter = 0;
bytesRead = this.reader.read(buffer);
if (bytesRead >= 0) {
outStream.write(buffer, 0, bytesRead);
counter += bytesRead;
System.out.println("total bytes read: " +
counter);
}
if (bytesRead < 1024) {
outStream.flush();
}
while (true)
{
bytesRead = this.reader.read(buffer);
if (bytesRead >= 0) {
outStream.write(buffer, 0, bytesRead);
counter += bytesRead;
System.out.println("total bytes read: " +
counter);
}
if (bytesRead ==0)
{
outStream.flush();
break;
}
}
System.out.println("Sent:"+filename+" from:"+MainApp.computersconnection.getIp());
} catch (Exception e) {
System.out.println("Error on downloading file!");
}
【问题讨论】:
-
提示:文件中发生的事情不是步长的精确倍数? (在写作方面)如果
completed == filesize你在读什么(在文件结束之后)? -
文件结束后我什么都不读,完成后==文件大小发送端的大小。
-
你是什么意思你是“发送端”?您似乎正在读取另一个缓冲区并写入它。
-
我不能使用另一个缓冲区,因为你在客户端看到的是当我点击按钮开始时的动作
-
我建议;如果您已阅读所有数据,为什么还要尝试做任何事情? (我没有提到另一个缓冲区)
标签: java sockets client send sendfile