Skip to Main Content

Java APIs

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Sending multiple files using one socket

843790Jan 1 2008 — edited Apr 22 2008
Hi guys

I'm working on a simple app that sends multiple files over LAN or I-NET. The problem is that the app run seems to be non-deterministic. I keep getting this error on the client side:
java.io.UTFDataFormatException: malformed input around byte 5
        at java.io.DataInputStream.readUTF(Unknown Source)
        at java.io.DataInputStream.readUTF(Unknown Source)
        at service.DownloadManager.storeRawStream(DownloadManager.java:116)
        at service.DownloadManager.downloadFiles(DownloadManager.java:47)
        at manager.NetworkTransferClient$1.run(NetworkTransferClient.java:104)
The byte position changes every time I run a transfer. The error is caused by this line: String fileName = in.readUTF(); Here's the complete code:

Client
private void storeRawStream() {                                
        try {
            FileOutputStream fileOut;                        
            
            int fileCount = in.readInt();            
            for(int i=0; i<fileCount; i++) {  
                byte data[] = new byte[BUFFER];
                
                String fileName = in.readUTF();                
                
                fileOut = new FileOutputStream(new File(upload, fileName));  
                long fileLength = in.readLong();                                  
                for(int j=0; j<fileLength / BUFFER; j++) {
                    int totalCount = 0;
                    
                    while(totalCount < BUFFER) {                        
                        int count = in.read(data, totalCount, BUFFER - totalCount);
                        totalCount += count;                  
                    }
                    
                    fileOut.write(data, 0, totalCount);
                    fileOut.flush();
                    
                    bytesRecieved += totalCount;                                   
                }
                
                // read the remaining bytes                
                int count = in.read(data, 0, (int) (fileLength % BUFFER));                                         
                fileOut.write(data, 0, count);               
                
                fileOut.flush();
                fileOut.close();       
                
                transferLog.append("File " + fileName + " recieved successfully.\n");   
            }  

        } catch (Exception ex) {
            ex.printStackTrace();
        }
        
    }
Server
public void sendFiles(File[] files) throws Exception {
        byte data[] = new byte[BUFFER];
        
        FileInputStream fileInput;                                        
        out.writeInt(files.length);               

        for (int i=0; i<files.length; i++) {    
            // send the file name
            out.writeUTF(files.getName());
// send the file length
out.writeLong(files[i].length());

fileInput = new FileInputStream(files[i]);

int count;
while((count = fileInput.read(data, 0, BUFFER)) != -1) {
out.write(data, 0, count);
bytesSent += count;
}

fileInput.close();
}

out.flush();
}
Does anybody know where's the problem? Thanx for any reply.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on May 20 2008
Added on Jan 1 2008
3 comments
2,336 views