zoukankan      html  css  js  c++  java
  • python基础--基于套接字进行文件传输、异常处理、socketserver模块

    异常处理:

        什么是异常处理:

            程序在运行过程中出现了不可预知的错误,并且该错误没有对应的处理机制,那么就会以异常的形式表现出来,造成的影响就是整个程序无法再正常运行

        异常的结构:

            异常的类型、异常的信息、异常的位置

        异常的种类:

            1、语法错误

                是你程序能立刻解决的,这种错误是不能被容忍的,语法上的错误发现之后应该立刻解决

            2、逻辑错误

                逻辑错误无法一眼就看出来,因为是针对逻辑上的错误,可以采用异常处理机制进行捕获

        常见的报错类型:

            NAMEERROR 名字错误

            SynataxERROR  语法错误

            KeyERROR  键不存在

            ValueError  值错误

            IndexError  索引错误

        如何避免:

            异常处理:

                在你认为可能会出现bug的代码块上方try一下,注意try内部的代码块要越少越好。

    try:
        # 可能出现错误的代码块
        pass
    except 出错的类型 as  e:  # 将报错的信息赋值给变量e
         pass
        # 出错之后的处理机制   

    UDP通信:数据报协议(自带报头), 没有双向通道,通信类似于发短信

        1、udp协议客户端允许发空

        2、udp协议不会粘包

        3、udp协议服务端不存在的情况下,客户端照样不会报错

        4、udp协议支持并发

        并发:看起来像是同时运行

        并行:真正意义上的同时运行

    socketserver:

        UDP的服务端:

    import socketserver
    
    
    class MyServer(socketserver.BaseRequestHandler):
        def handle(self):
            # print('来啦 老弟')
            while True:
                data,sock = self.request
                print(self.client_address)  # 客户端地址
                print(data.decode('utf-8'))
                sock.sendto(data.upper(),self.client_address)
    
    
    if __name__ == '__main__':
        """只要有客户端连接  会自动交给自定义类中的handle方法去处理"""
        server = socketserver.ThreadingUDPServer(('127.0.0.1',8080),MyServer)  # 创建一个基于TCP的对象
        server.serve_forever()  # 启动该服务对象

        UDP的客户端:

    import socket
    import time
    
    client = socket.socket(type=socket.SOCK_DGRAM)
    server_address = ('127.0.0.1',8080)
    
    while True:
        client.sendto(b'hello',server_address)
        data,addr = client.recvfrom(1024)
        print(data.decode('utf-8'),addr)
        time.sleep(1)

      

        TCP的服务端:

    import socketserver
    
    
    class MyServer(socketserver.BaseRequestHandler):
        def handle(self):
            # print('来啦 老弟')
            while True:
                data = self.request.recv(1024)
                print(self.client_address)  # 客户端地址
                print(data.decode('utf-8'))
                self.request.send(data.upper())
    
    
    if __name__ == '__main__':
        """只要有客户端连接  会自动交给自定义类中的handle方法去处理"""
        server = socketserver.ThreadingTCPServer(('127.0.0.1',8080),MyServer)  # 创建一个基于TCP的对象
        server.serve_forever()  # 启动该服务对象

        TCP的服务端:

    import socket
    
    client = socket.socket()
    client.connect(('127.0.0.1',8080))
    
    while True:
        client.send(b'hello')
        data = client.recv(1024)
        print(data.decode('utf-8'))
  • 相关阅读:
    面向过程(或者叫结构化)分析方法与面向对象分析方法到底区别在哪里?请根据自己的理解简明扼要的回答
    当下大部分互联网创业公司为什么都愿意采用增量模型来做开发?
    0
    计算机网络
    java基础
    java 多线程编程
    java类与对象,用程序解释
    修饰符的探讨
    java学习总结02
    java day1
  • 原文地址:https://www.cnblogs.com/tulintao/p/11321336.html
Copyright © 2011-2022 走看看