日期:2014-05-20  浏览次数:20823 次

100分,socket传输文件,跪求大神告诉我,我的代码错在哪里
问题:我现在要传输文件夹下的所有文件,代码如下,问题是我在client端接受到的数据只有最后一个文件是正确的,其他的都少了几KB或多了几KB,传输的文件大小从5M到300M不等,我找了2天错误都不知道我哪些错了,求大神指点...

server代码:
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class MyServer {
static String filePath = "D://DatabaseBackup";

static String getClientMsg(InputStream clientIn) {
byte[] buffer = new byte[77];
int length = 0;
try {
length = clientIn.read(buffer, 0, buffer.length);
} catch (IOException e) {
e.printStackTrace();
}
return new String(buffer, 0, length);
}

static File[] getBackupDatabases() {
File file = new File(filePath);
File[] files = null;
if (file.exists() && file.isDirectory() && file != null) {
files = file.listFiles();
}
return files;
}

static void getDataOutputStream(Socket socket, File[] files) {
try {
DataOutputStream serverOut = new DataOutputStream(
socket.getOutputStream());
DataInputStream fileIn = null;
serverOut.writeInt(files.length);
serverOut.flush();
for (int i = 0; i < files.length; i++) {
fileIn = new DataInputStream(new BufferedInputStream(
new FileInputStream(filePath + "//"
+ files[i].getName())));
serverOut.writeLong(files[i].length());
System.out.println("file [" + i + "] length is : "
+ files[i].length());
serverOut.flush();
serverOut.writeUTF(files[i].getName());
serverOut.flush();
byte[] buffer = new byte[1024];
int length = 0;
while ((length = fileIn.read(buffer, 0, buffer.length)) != (-1)) {
serverOut.write(buffer, 0, length);
}
serverOut.flush();
try {
Thread.sleep(0);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
fileIn.close();
serverOut.close();
} catch (IOException e) {
e.printStackTrace();