1. <wbr id="cnjas"><legend id="cnjas"></legend></wbr>

          Linux培訓
          達內IT學院

          400-111-8989

          Python socket實現文件傳輸的服務端與客戶端

          • 發布:Linux培訓
          • 來源:網絡
          • 時間:2015-07-09 11:04

          用python的socket模塊實現的一個很簡單的文件傳輸功能,不懂怎么寫比較科學優雅,求各路大神指導

          服務端:

          #!/usr/bin/python 
          #coding:utf-8 
          import SocketServer 
          import subprocess 
          import string 
          import time 
          class MyTcpServer(SocketServer.BaseRequestHandler): 
              def recvfile(self, filename): 
                  print "starting reve file!"
                  f = open(filename, 'wb') 
                  self.request.send('ready') 
                  while True: 
                      data = self.request.recv(4096) 
                      if data == 'EOF': 
                          print "recv file success!"
                          break
                      f.write(data) 
                  f.close() 
                                                   
              def sendfile(self, filename): 
                  print "starting send file!"
                  self.request.send('ready') 
                  time.sleep(1) 
                  f = open(filename, 'rb') 
                  while True: 
                      data = f.read(4096) 
                      if not data: 
                          break
                      self.request.send(data) 
                  f.close() 
                  time.sleep(1) 
                  self.request.send('EOF') 
                  print "send file success!"
                                               
              def handle(self): 
                  print "get connection from :",self.client_address 
                  while True: 
                      try: 
                          data = self.request.recv(4096) 
                          print "get data:", data    
                          if not data: 
                              print "break the connection!"
                              break                
                          else: 
                              action, filename = data.split() 
                              if action == "put": 
                                  self.recvfile(filename) 
                              elif action == 'get': 
                                  self.sendfile(filename)  
                              else: 
                                  print "get error!"
                                  continue
                      except Exception,e: 
                          print "get error at:",e 
                                                       
                                                   
          if __name__ == "__main__": 
              host = '' 
              port = 60000
              s = SocketServer.ThreadingTCPServer((host,port), MyTcpServer) 
              s.serve_forever() 
          客戶端:

          #!/usr/bin/python 
          #coding:utf-8 
          import socket 
          import sys 
          import time 
          ip = '192.168.1.214'
          port = 60000
          s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
          def recvfile(filename): 
              print "server ready, now client rece file~~"
              f = open(filename, 'wb') 
              while True: 
                  data = s.recv(4096) 
                  if data == 'EOF': 
                      print "recv file success!"
                      break
                  f.write(data) 
              f.close() 
          def sendfile(filename): 
              print "server ready, now client sending file~~"
              f = open(filename, 'rb') 
              while True: 
                  data = f.read(4096) 
                  if not data: 
                      break
                  s.sendall(data) 
              f.close() 
              time.sleep(1) 
              s.sendall('EOF') 
              print "send file success!"
                                           
          def confirm(s, client_command): 
              s.send(client_command) 
              data = s.recv(4096) 
              if data == 'ready': 
                  return True
                                           
          try: 
              s.connect((ip,port)) 
              while 1: 
                  client_command = raw_input(">>") 
                  if not client_command: 
                      continue
                                               
                  action, filename = client_command.split() 
                  if action == 'put': 
                      if confirm(s, client_command): 
                          sendfile(filename) 
                      else: 
                          print "server get error!"
                  elif action == 'get': 
                      if confirm(s, client_command): 
                          recvfile(filename) 
                      else: 
                          print "server get error!"
                  else: 
                      print "command error!"
          except socket.error,e: 
              print "get error as",e 
          finally: 
              s.close()  
          執行效果

          執行效果

          預約申請免費試聽課

          填寫下面表單即可預約申請免費試聽!怕錢不夠?可就業掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業?一地學習,可全國推薦就業!

          上一篇:Python實現十六進制與十進制
          下一篇:3個開源的 Python Shell
          • 掃碼領取資料

            回復關鍵字:視頻資料

            免費領取 達內課程視頻學習資料

          • 視頻學習QQ群

            添加QQ群:1143617948

            免費領取達內課程視頻學習資料

          Copyright ? 2018 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

          選擇城市和中心
          黑龍江省

          吉林省

          河北省

          湖南省

          貴州省

          云南省

          廣西省

          海南省

          欧美做爰视频免费播放_做暖全过程免费的视频_性爱免费视频 百度 好搜 搜狗
          <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>