【发布时间】:2014-10-27 11:43:49
【问题描述】:
我在 java 中使用 sockets 进行 文件传输。 这是客户端代码
for(int i = 0;i < fileList.size();i++) {
String filename = (String)fileList.get(i);
RequestFile(filename);
try {
BufferedOutputStream fileWriter = new BufferedOutputStream(
new FileOutputStream(
new File(PROGRAM_PATH + "/" +
filename)));
int packet;
int count = 0;
while((packet = fileReader.read()) != -1) {
fileWriter.write(packet);
count++;
}
System.out.println(filename + " receiver complete. (count : " + count + ")");
fileWriter.flush();
fileWriter.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
这是服务器代码
public void SendFile(String filename) {
try {
fileReader = new BufferedInputStream(new FileInputStream(CLIENT_PATH + "/" + filename));
int packet;
int count = 0;
while((packet = fileReader.read()) != -1) {
count++;
fileWriter.write(packet);
}
fileWriter.write(-1);
System.out.println(count);
fileReader.close();
}
catch (IOException ioe) {
ioe.printStackTrace();
}
}
当我检查服务器的计数时,它是635。这意味着服务器已发送数据635 次。
但是,客户的打印次数只有512。 (从 0 到 511)我认为它停在了read(),因为
System.out.println(filename + " receiver complete. (count : " + count + ")");
不打印。谁能告诉我原因和解决方法?
【问题讨论】:
-
我认为您应该使用
packet增加count并检查是否所有字节都被传输。
标签: java file-transfer bufferedinputstream bufferedoutputstream