1. 程式人生 > >基於python3網路

基於python3網路

網路程式設計

  • 網路:

  • 網路協議:一套規則

  • 網路模型七層模型-七層 物理層 資料鏈路層 網路層 傳輸層 會話層 表示層 應用層四層模型 鏈路層 網路層 傳輸層 應用層

  • 每一層都有相應的協議負責交換資訊或者協同工作

  • TCP/IP協議 協議族

  • IP地址:負責網路上唯一定位一個機器IP地址分5類3點4段式,每個欄位是0~255127.0.0.1:本機IPV4 IPV6

  • 埠號範圍:0-65535 知名埠:0——1023已經知名的埠 非知名埠:1024->

TCP/UDP 協議

  • UDP:非安全的不面向連結的傳輸

    • 安全性差

    • 大小限制64kb

    • 沒有順序

    • 速度快

  • TCP

    • 基於連結的通訊

  • SOCKET程式設計

    • socket(套接字):這是一個網路通訊的端點,實現不同主機的程序通訊

    • 通過IP+埠定位對方併發送資訊的通訊機制

    • 分為UDP和TC P

  • UDP 程式設計Server端流程

    • 1.建立socket.socket是負責具體通訊的一個例項

    • 2.繫結,為建立socket指派固定的埠和IP地址

    • 3.接受對方傳送的內容

    • 4.給對方傳送反饋,

    • 此步驟為非必需步驟Client端流程:

      • 1.建立通訊的socket

      • 2.傳送內容到指定伺服器 3

      • .接受伺服器的反饋資訊

      • 服務端案例V01

      • import socket
        
        def serverFunc():
            #AF_INET使用IPv4協議  SOCK_DGRAM使用UDP協議
            soc = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
            #繫結IP和埠號
            addr = ('127.0.0.1',10089)
            soc.bind(addr)
            #接受訪問
            data,addr = sco.recvfrom(500)
            print(data)
            #需要將資料進行解碼才可以進行讀取
            data = data.deconde()
            print(data)
        
            #給對方的反饋資訊
            res = '反饋資訊'
            #將資料進行編碼傳送
            res = res.encode()
            soc.sendto(res,addr)
        
         if __name__ == "__main__":
            print('Start Server...')
        
            serverFunc()
        
            print('End Server.....')
        

         

      • 客戶端案例V02

      • import socket
        
        def clientFunc():
            soc = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
            text = '來自客戶端的訪問'
            data = text.encode()
            soc.sendto(data,('127.0.0.1',10089))
            data,addr = socket.recvfrom(200)
            data = data.decode()
            print(data)
        if __name__ == '__main__':
            print("client...")
            clientFunc()
            print("end client...")

         

      • 伺服器要求永久執行案例V03

        import socket
        import time
        
        def serverFunc():
            soc = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
            addr = ('127.0.0.1',10089)
            soc.bind(addr)
            data,addr = soc.recvfrom(500)
            data = data.decode()
            print(data)
            res = '來自伺服器的反饋資訊'
            res = res.encode()
            soc.sendto(res,addr)
        if __name__ == '__main__':
            print('Start Server..')
            while True:
                try:
                    serverFunc()
                except Exceptiom as e:
                    print(e)
                time.sleep(1)
            print('end Server...')
      •  

  • TCP程式設計

    • 面向連結傳輸,及每次傳輸之前需要建立連線

      • 客戶端和服務端倆個程式需要編寫

      • Server端的編寫流程:

        • 1.建立socket負責具體通訊,這個socket其實只負責接受對方的請求

        • 2.繫結埠號和地址

        • 3.監聽接入的訪問socket

        • 4.接受訪問的socket,可以理解接受訪問即建立了一個通訊的連線.

        • 5.接受對方的傳送內容,利用接收到的socket接收內容

        • 6.如過有必要,給對方傳送反饋資訊

        • 7.關閉連結

        • #匯入包
          import socket
          
          def TCP_Server():
              #AF_INET使用IPV4協議,SOC_STREAM使用TCP
              soc = socket.socket(socket.AF_INET,sockey.SOC_STREAM)
              addr = ('127.0.0.1',10089)
              #繫結地址和埠號
              soc.bind(addr)
              #監聽網路
              soc.listen()
              while True:
                  #返回值為內容和連結地址
                  skt,addr = soc.accept()
                  msg = skt.recv(500)
                  data = msg.decode()
                  rest = "recvide msg : {0} from {1}".formate(data,addr)
                  
                  print(rest)
                  skt.send(rest.encode())
                  skt.close()
          if __name__ == "__main__":
              print("Start Server...")
              TCP_Server()
              

           

      • Client 端流程:

        • 1.建立通訊的socket

        • 2.連結對方,請求跟對方遠端連結

        • 3.傳送內容到對方伺服器

        • 4.接受對方的反饋

        • 5.關閉鏈路的接通案例V04 V05

        • import socket
          
          def TCP_Clinet():
              sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
              addr = ('127.0.0.1',10089)
              scok.bind(addr)
              msg = "這是一跳客戶端的資訊"
              sock.send(msg.encode)
              res = sock.recv(500)
              print(res.decode)
              sock.close()
          if __name__ == "__main__":
              TCP_Client()

           

FTP程式設計

  • FTP(FileTransferProtocal)檔案傳輸協議

  • 用途:定製一些特殊的上穿下載檔案的服務

  • 使用者分類:登陸FTP伺服器需要一個賬號

    • Real:賬戶

      • Guest:可對臨時對某一類人的行為進行授權

      • Anonymous:匿名賬戶,允許任何人。

  • FTP工作流程

    • 客戶端連結遠端主機上的FTP伺服器

    • 客戶端輸入使用者名稱和密碼(或者“anonymous”和電子郵件地址)

    • 客戶端和伺服器進行各種檔案傳輸和資訊查詢操作

    • 客戶端從遠端伺服器FTP退出,結束傳輸

  • FTP檔案的表示

    • 分三段表示FTP伺服器上的檔案

    • HOST:主機地址,類似於ftp.mozilla.org,以FTP開頭

    • DIR:目錄表示檔案所在本地的路徑

    • File:檔名稱

    • 如果想要完整精確表示ftp上某一個檔案,需要上述三部分組合在一起。-案例V06

    • #對應的包的匯入
      import ftplib
      import os
      import socket
      
      #三步表示精確的ftp伺服器上的某一個檔案
      HOST = 'ftp.acc.umu.se'
      DIR = 'Public/EFLIB/'
      FILE = 'README'
      
      #遠端連結FTP伺服器
      try:
          f = ftplib.FTP()
          f.set_debuglevel(2)
          f,connect(HOST)
      except Exception as e:
          print(e)
          exit()
          print("******Connect to hsot {0}".formate(HOST))
      
      #登陸伺服器
      try:
          f.login()
      except Expetion as e:
          print(e)
          exit()
          print("login in sa 'anonymouse'")
      #登陸成功後更改當前目錄
      try:
          f.cwd(DIR)
      except Exception as e:
          print(e)
          exit()
          print("***change dir to {0}".formate(DIR))
      #切換目錄之後下載對應得檔案
      try:
          #從FTP上下載檔案
          #第一個引數是FTP命令
          #第二個引數是回撥函式
          #這個函式得指,執行RETR命令,下載檔案到本地後,執行得回撥函式
          f.retrbinary('RETR {0}'.formate(FILE),open(FILE,"wb").write)
      except Exception as e:
          print(e)
          exit()
      #連結退出
      f.quit()