在客户端 - 服务器程序中传输文件,但所有字节都没有传输

时间:2014-03-18 08:31:15

标签: java client-server

我目前正在编写一个客户端服务器程序,允许我将文件从客户端上传到服务器。但是,当我尝试此操作时,文件会损坏,并且看起来并非所有字节都被传输。有人能告诉我为什么会这样吗?感谢。

以下是客户端代码的一部分:

System.out.println("What file would you like to upload?");
String file=in.next();//get file name
outToServer.writeUTF(file);//send file name to server
File test= new File(file);//create file

byte[] bits = new byte[(int) test.length()]; //byte array to store file
FileInputStream fis= new FileInputStream(test); //read in file

//write bytes into array
int size=(int) test.length();//size of array
outToServer.write(size);//send size of array to Server

fis.read(bits);//read in byte values
fis.close();//close stream
outToServer.write(bits, 0, size);//writes bytes out to server

这是服务器代码:

String filename= inFromClient.readUTF();//read in file name that is being uploaded

int size=inFromClient.read(); //read in size of file
byte[] bots=new byte[size]; //create array
inFromClient.read(bots);  //read in bytes

FileOutputStream fos=new FileOutputStream(filename);
fos.write(bots);
fos.flush();
fos.close();

String complete="Upload Complete.";
outToClient.writeUTF(complete);

2 个答案:

答案 0 :(得分:0)

尝试并使用Java 7的Files.copy()

在客户端:

final Path source = Paths.get(file);
Files.copy(source, outToServer);

在服务器端:

final Path destination = Paths.get(file);
Files.copy(inFromClient, destination);

请参阅javadoc for Files

答案 1 :(得分:0)

通常的错误。您假设read()填充缓冲区。没有义务这样做。见Javadoc。

在Java中复制流的规范方法如下:

while ((count = in.read(buffer)) > 0)
{
    out.write(buffer, 0, count);
}

两端使用此功能。你不需要一个像文件大小的缓冲区。这适用于具有一个或多个元素的任何字节数组。