[jcifs] rcv_buf_size & snd_buf_size

Stian Brattland stian at brattland.no
Thu Oct 8 02:41:30 MDT 2009


Hi Michael,

I have pasted in my testing code below. 

package com.tracker.services;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import jcifs.smb.SmbFile;
import jcifs.smb.SmbFileInputStream;

public class CopyTest {

   private static final byte[] buffer  = new byte[60416];
  
   public CopyTest() {
       //I'm setting the client properties here in the constructor. 
However, regardless
       //of the values i set here WireShark never reports package sizes 
above 16574 bytes.
       System.setProperty("jcifs.smb.client.rcv_buf_size", "60416");
       System.setProperty("jcifs.smb.client.snd_buf_size", "16644");
   }
  
   /**
    * Copy a file from samba server to the local file system.
    *
    * @param   serverPath a path in the format 
smb://username:password@0.0.0.0/folders/file
    *          which represents the file on the samba server.
    * @param   localPath an absolute path representing the file on the 
local file system.
    * @throws  java.lang.Exception
    */
   public void copyFromServer(String serverPath, String localPath) 
throws Exception {
       SmbFile serverFile  = new SmbFile(serverPath);
       File localFile      = new File(localPath);

       InputStream in      = new SmbFileInputStream(serverFile);
       OutputStream out    = new FileOutputStream(localFile);

       try {
           while (true) {
               synchronized (buffer) {
                   int amountRead = in.read(buffer);
                   if (amountRead == -1) {
                       break;
                   }
                   out.write(buffer, 0, amountRead);
               }
           }

       } catch (Exception e) {
           throw e;

       } finally {
           if (in != null) { in.close();}
           if (out != null) {out.close();}
       }
   }
}



Michael B Allen skrev:
> On Wed, Oct 7, 2009 at 5:56 AM, Stian Brattland <stian at brattland.no> wrote:
>   
>> Hi,
>>
>> I'm using WireShark to monitor the smb traffic between my application (which
>> use JCifs) and a Samba server running on linux. All settings are the default
>> ones.
>>
>> When i copy files using windows drag and drop, WireShare reports the
>> following: Read AndX Request, FID: 0x14fe, 61440 bytes at offset (...).
>> However, when
>> i use the JCifs package, WireShare never reports package sizes above 16574.
>> Regardless of wether i change the "jcifs.smb.client.snd_buf_size" or
>> "jcifs.smb.client.rcv_buf_size", this package size never changes.
>>
>> I'm using System.setProperty() when i try to alter the buffer sizes. Have
>> anyone else ever experienced this problem?
>>     
>
> Hi Stian,
>
> What does your JCIFS code look like? Maybe it's not using a larger buffer?
>
> Note that a larger buffer does not equate to faster transfers. The
> most important factor is getting as much data into each packet (e.g.
> every other packet has 1 byte would be slow).
>
> Mike
>
>   




More information about the jCIFS mailing list