title: File Transfer with Sockets on Python
body: <p>Trying to build a simple file transfer with sockets on Python. I got stuck and it seems that I can't send any part of the file.</p>
  
  <p>Following some advice, I've tried to send the last line of the file, so I can know when to finish the connection. </p>
  
  <p>But it happens that once I send the first package, the client never gets the rest.</p>
  
  <p>Here you will see my code (Server side):</p>
  
  <pre><code>import os
  import socket
  PORT = 8080
  HOST = 'localhost'
  socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  socket.bind((HOST,PORT))
  socket.listen(10)
  conn, addr = socket.accept()
  print '\033[46m\033[34m\033[1mBienvenido al File Sender v.0.02 hecho en Python. Este         programa permite enviar archivos a traves de tu maquina\033[0m'
  ANSI_RED = '\033[31m'
  ANSI_BLUE = '\033[34m'
  ESCAPEANSI = '\033[0m'
  def seleccion_path():
  PATH = raw_input('\033[34m\033[1mSelect the Path (./ by default)').strip('n')
  if PATH == '':
      PATH = os.getcwd()   
  print PATH, ESCAPEANSI
  acepta_path = raw_input('\033[34m\033[1mSi o No (S/N)').lower().strip(' ')
  if acepta_path == 's' or acepta_path == 'si':
      return PATH
  else:
      seleccion_path()
  def filesDir(path):
  files = os.listdir(PATH)
  for fl in files:
      i = int(files.index(fl))+1
      print ANSI_RED + str(i)+ ')' + fl
  return files
  
  PATH = seleccion_path()
  print 'el PATH seleccionado es:', PATH + '\n'
  filesDir(PATH)
  fileSelected = int(raw_input(ANSI_BLUE + 'Select a file with the number').strip(' ').lower()) 
  print PATH + filesDir(PATH)[fileSelected-1]
  fileToSend = open(PATH + filesDir(PATH)[fileSelected-1], 'rb')
  qLines = len(open(PATH + filesDir(PATH)[fileSelected-1], 'rb').readlines())
  
  finalLine = cpfileToSend.readlines()[qLines-1]
  conn.send(finalLine)
  while True:
      data = conn.sendall(fileToSend.readline())
      conf = conn.recv(1024)
      print conf
      if conf == 'OK':
          conn.close()
          fileToSend.close()
           break
  print '\033[43m File sent'
  #Finaliza el programa y deja los codigos ANSI cerrados
  print ESCAPEANSI
  exit()
  </code></pre>
  
  <p>Here is the Client:</p>
  
  <pre><code>import os
  import socket
  PORT = 8080
  HOST = 'localhost'
  
  socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  socket.connect((HOST, PORT))
  fname = open('./fileSent.pdf', 'w+')
  
  finalLine = socket.recv(1024)
  print finalLine
  while True:
      strng = socket.recv(2048)
      print 'aaaaa',strng
      fname.write(strng)
      if finalLine in strng:
          fname.write(strng)
          socket.send('OK')
          socket.close()
  fname.close()
  print 'Data received correctly' 
  exit()
  </code></pre>