基于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()
      
          

猜你喜欢

转载自blog.csdn.net/qq_36389249/article/details/82974676
今日推荐