title: Python Client/Server send big size files
body: <p>I am not sure if this topic have been answered or not, if was I am sorry:</p>
  
  <p>I have a simple python script the sends all files in one folder:</p>
  
  <p>Client:</p>
  
  <pre><code>import os,sys, socket, time
  def Send(sok,data,end="292929"):
      sok.sendall(data + end);
  def SendFolder(sok,folder):
      if(os.path.isdir(folder)):
          files = os.listdir(folder);
          os.chdir(folder);
          for file_ in files:
              Send(sok,file_);#Send the file name to the server
              f = open(file_, "rb");
              while(True):
                  d = f.read();#read file
                  if(d == ""):
                      break;
                  Send(sok, d, "");#Send file data
              f.close();
              time.sleep(0.8);#Problem here!!!!!!!!!!!
              Send(sok,"");#Send termination to the server
              time.sleep(1);#Wait the server to write the file
          os.chdir("..");
          Send(sok,"endfile");#let the server know that we finish sending files
      else:
          Send("endfile")#If not folder send termination
  try:
      sok1 = socket.socket();
      sok1.connect(("192.168.1.121",4444))#local ip
      time.sleep(1);
      while(True):
          Send(sok1,"Enter folder name to download: ");
          r = sok1.recv(1024);
          SendFolder(sok1,r);
          time.sleep(0.5);
  except BaseException, e:
      print "Error: " + str(e);
      os._exit(1);
  </code></pre>
  
  <p>Server:</p>
  
  <pre><code>import sys,os,socket,time
  # receive data
  def Receive(sock, end="292929"):
      data = "";
      while(True):
          if(data.endswith(end)):
              break;
          else:
              data = sock.recv(1024);
      return data[:-len(end)];#return data less termination
  def FolderReceive(sok):
      while(True):
          r = Receive(sok);# recv filename or folder termination("endfile")
          if(r == "endfolder"):
              print "Folder receive complete.";
              break;
          else:
              filename = r;#file name
              filedata = Receive(sok);# receive file data
              f = open(filename,"wb");
              f.write(filedata);
              f.close();#finish to write the file
              print "Received: " + filename;
  try:
      sok1 = socket.socket();
      sok1.bind(("0.0.0.0",4444));
      sok1.listen(5);
      cl , addr = sok1.accept();#accepts connection
      while(True):
          r = Receive(cl);
          sys.stdout.write("\n" + r);
          next = raw_input();
          cl.sendall(next);#send folder name to the client
          FolderReceive(cl);
  except BaseException, e:
      print "Error: " + str(e);
      os._exit(1);
  </code></pre>
  
  <p>I know this not best server ever...but is what I know. This just work for a folder with small files because if I send big files(like 5mb...) it crashes because the time the client waits for the server is not enough. </p>
  
  <p>So my question is how can I send the files to the server without client need to wait??or know exactly how many time the client needs to wait for the server to receive the file?? Some code that does the same but handling any file size, any help?</p>