2013-02-01 35 views
2

我通过套接字将文件从客户端传输到基本服务器。当我传输小文件(1kb)时,它在String fileName = clientData.readUTF();上失败,但使用大文件(31mb)时效果很好。为什么.readUTF()通过套接字失败,文件大小很小?

在我看来,它没有足够的时间。有谁能澄清这个请吗? TIA

SERVER

public void receiveFile() 
{ 
    System.out.println("in receive file"); 
    try { 
     int bytesRead; 

     DataInputStream clientData = new DataInputStream(clientSocket.getInputStream()); 

     String fileName = clientData.readUTF(); 
     OutputStream output = new FileOutputStream(("received_from_client_" + fileName)); 
     long size = clientData.readLong(); 
     byte[] buffer = new byte[1024]; 
     while (size > 0 && (bytesRead = clientData.read(buffer, 0, (int) Math.min(buffer.length, size))) != -1) { 
      output.write(buffer, 0, bytesRead); 
      size -= bytesRead; 
     } 

     output.close(); 
     clientData.close(); 

     System.out.println("File " + fileName + " received from Client " + clientID); 
    } catch (IOException ex) { 
     System.err.println("ERROR Connection closed Client " + clientID); 
    } 
} 

痕量

java.io.EOFException 
    at java.io.DataInputStream.readUnsignedShort(DataInputStream.java:340) 
    at java.io.DataInputStream.readUTF(DataInputStream.java:589) 
    at java.io.DataInputStream.readUTF(DataInputStream.java:564) 
    at example3.CLIENTConnection.receiveFile(CLIENTConnection.java:75) 
    at example3.CLIENTConnection.run(CLIENTConnection.java:50) 
    at java.lang.Thread.run(Thread.java:722) 
+1

这行不代码失败上(打印'ex'的堆栈跟踪。) – McDowell

+0

@McDowell加质疑。 TIA。 –

+0

嗯,这是所有[文件](http://docs.oracle.com/javase/7/docs/api/java/io/DataInputStream.html#readUnsignedShort%28%29)不得不说的那个方法投掷一个'IOException':_The流已经关闭,并且包含的​​输入流不支持关闭后阅读,或其他I/O错误occurs._我想看看服务器代码,看看当它被调用'writeUTF'会发生什么。 – McDowell

回答

0

对等体已经关闭了连接。没有更多的数据。关闭你的结局并忘掉它。