程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

基於python3網絡

編輯:Python

網絡編程

  • 網絡:

  • 網絡協議:一套規則

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

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

  • 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()
      

       


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved