python套接字发送文件

时间:2014-06-13 22:54:02

标签: python sockets send transfer recv

尝试一种新的方式来发送文件。客户端将每10分钟运行一次,要求服务器在最近10分钟内发送新内容。到目前为止,我有40%的时间工作。到目前为止,我无法弄清楚为什么会这样。

服务器主循环:

while 1:
  conn, addr = s.accept()

  last_ai = get_last_sent_ai()
  new_ai = get_new_ai(last_ai)
  ai_notes = ''

  ''' send # of file '''
  print "sending length ---------"
  conn.sendall('{0}'.format(len(new_ai)))

  for ai_file in new_ai:
    ai_file = ai_file.rstrip()
    if not os.path.isfile(ai_file): continue

    f = open(ai_file, 'rb')
    ai_notes = f.read()
    f.close()

    print "sending file infor " + '{0:<10d}:{1:>40s}'.format(len(ai_notes), ai_file)
    ready_flag = conn.recv(5)
    if ready_flag == "Ready":
      conn.sendall(ai_notes)

  if len(new_ai) > 0:
    update_last_sent(new_ai[-1])
  else:
    print 'nothing to send'
    conn.sendall(' ')
  conn.close()

s.close()

客户主循环:

if num_f == 0: sys.exit(0)
while num_f > 0:

  f_info = ''
  f_info = s.recv(50)

  f_len,f_name_tmp = f_info.split(':')
  f_len = int(f_len)

  s.sendall("Ready")

  f_name = f_name_tmp
  f = open(f_name, 'wb')
  recvd = 0
  while recvd < f_len:
    chunk = s.recv(min(f_len - recvd, 1024))
    if chunk == '':
      raise RuntimeError("socket connection broken")
    f.write(chunk)
    recvd = recvd + len(chunk)

  f.close()
  num_f -= 1
s.close()

更新: 我回去后改变发送和接收的方式,这个问题似乎已经消失了。当它挂起时必须进行某种阻塞,所以我按照python doc修改了代码,到目前为止所有的测试都在工作。

0 个答案:

没有答案