• python自动化_day8_socket网络编程


    基础数据类型,for循环,文件操作,函数,模块,面向对象等知识点归纳

    1 # 基础数据类型
    2 #       int float 加减乘除 乘方取余 小数的保留 round
    3 #   都可以存放任意的数据类型,增删改查
    4 #       str list tuple  序列 -----index
    5 #           字符串 split strip  startswith join
    6 #       dict set    散列 无序的 通过key获取值
    1 #for循环 while循环 if条件语句
    2     #for循环      你知道要循环多少次
    3     #while循环    不知道循环多少次
    4     #条件判断     无数个if语句只有一个分支会被执行
    1 #文件操作
    2     #打开模式
    3         #a w r -----直接对字符串操作
    4         #ab wb rb --直接对字节操作
    5     #操作系统的编码和python编码不一致的问题
     1 #函数
     2     #函数的基础:
     3         # 定义:关键字
     4         #参数:位置参数  *args  默认参数(关键字参数) **kwargs 返回值
     5         #调用:关键字:函数名(),参数:按照位置传,按照关键字传,接收返回值
     6     #函数的命名空间:
     7         #函数的内部可以使用外部的变量:读,写,改,声明:global改全局,nonlocal改局部
     8         #在外部不能使用函数内部的变量
     9     #闭包-----装饰器:
    10         #是在函数的前后添加功能
    11         #用别人写好的装饰器
    12     #生成器函数-----------迭代器----------生成器表达式---------列表推导式
    13         #yield写代码的时候尽量用,很好的节省内存
    14         #生成器表达式和列表推导式能够很好的简化代码
    15         #生成器函数的特点:调用不执行----面试之前看就可以
    16     #递归函数:
    17         #大部分的递归函数都可以用循环实现
    18         #递归相比于循环来说并不能节省内存,占用更多的空间
     1 #模块
     2     #内置模块
     3         #collections namedtuple  有序字典  默认字典
     4         #os  文件和文件夹的操作 和路径相关的  执行操作系统命令的
     5         #sys
     6         #random  随机整数  随机小数 随机抽取 打乱顺序
     7         #time  三种时间格式:字符串(格式化时间)  元组(结构化时间)   float(时间戳)
     8         #re   正则:写爬虫需要自己弄  findall search  match
     9         #序列化: 数据的序列化  (pickle json):dump load dumps loads  shelve
    10         #hashlib  摘要算法的模块 文件的一致性校验  加密认证  MD5算法和sha算法
    11         #logging  日志模块
    12         #configpaser  -------什么忘了。。。。。。
    13     #扩展模块 :没有讲呢
    14     #自定义模块:
    15         #模块和包
     1 #面向对象:
     2     #基础的定义
     3         #类 对象 实例化
     4         #class的定义  语法
     5         #三大特性:继承**** 封装***带双划线的都是私有的不能外部使用 多态
     6             #继承的规则 子类可以使用父类中的所有非私有的名字,前提是子类没有
     7                 #多继承的查找顺序问题:经典类 :深度优先  新式类里 : 广度优先
     8                 #super不是单纯的寻找父类,而是遵循mro(广度优先算法)顺序
     9             #封装
    10                 #私有的属性既不能被继承,也不能从类的外部调用
    11             #多态:python自带多态
    12         #组合:一个类的对象作为另外一个类对象的属性
    13         #反射:hasattr  getattr  用字符串的形式来获取变量
    14         #内置方法:__new__ python中类的构造方法,创造了对象在init之前执行,单例模式。

    异常处理:语法错误和逻辑错误

    常用异常包括:

     1 # AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
     2 # IOError 输入/输出异常;基本上是无法打开文件
     3 # ImportError 无法引入模块或包;基本上是路径问题或名称错误
     4 # IndentationError 语法错误(的子类) ;代码没有正确对齐
     5 # IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
     6 # KeyError 试图访问字典里不存在的键
     7 # KeyboardInterrupt Ctrl+C被按下
     8 # NameError 使用一个还未被赋予对象的变量
     9 # SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
    10 # TypeError 传入对象类型与要求的不符合
    11 # UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,
    12 # 导致你以为正在访问它
    13 # ValueError 传入一个调用者不期望的值,即使值的类型是正确的
    # try:
    #     print('123')
    #     int('a')
    #     print('222')
    # except ValueError as e: #使用as之后可以把错误显示出来
    #     print(e,'报错了')
    # except IndexError:
    #     print('报错了')
    # except Exception as e:
    #     print(e,'很多错了')
    # except :print('错')
    #try
    #except
    #except as
    #except Exception as e:  ---推荐使用
    #找到一个满足条件的其他分支都不走了
    #程序中会有很多预料不到的错误 使用万能异常
    #万能异常太万能不好提示,针对性错误提示可以更人性化
    #所有错误提示完之后再添加一个万能异常,针对性错误走完之后再走。
    #具体的异常处理+万能异常
        #能够使用提前预料到的异常都应该用具体的异常去处理,剩下其他的异常用万能异常控制
        #万能异常应该在最后
    1 try:pass
    2 except ValueError:print('')
    3 except Exception as e:print(e)#处理所有的异常
    4 else:pass #try中的代码没有错误执行这个else
    5 finally:pass #无论如何都会执行
    6 # assert 1 == 2 #断言 满足条件就执行

    模块介绍:

     1 #导入一个模块,就相当于执行了这个文件
     2 #一个模块如果执行多次import 相当于执行一次
     3 #import 和from import 的区别
     4 #模块之间不能发生循环引用
     5 
     6 #import 一个模块,那么在当前的全局命名空间中,就有了一个名字
     7 #这个名字会指向属于自己的空间,空间里存储了所有文件中的名字
     8 # from my_module import func
     9 # import my_module
    10 #from import
    11 #仍会执行整个文件
    12 #文件中的名字会被存储在一块独立的内存空间中
    13 #import后面的名字会出现在全局
    14 #相当于对独立命名空间中的一个引用
    15 #from import也支持as语句 也支持 导入多个名字
    16 #from import * 相当于导入所有名字
    17 
    18 
    19 #__all__=['money']  和 from import * 互相影响
    20 #导入模块的顺序 :内置 扩展 自定义

    socket

    import socket
    ########################tcp-server#####################
    # sk = socket.socket()
    # sk.bind(('127.0.0.1',9000))
    # sk.listen()
    # while True:
    #     conn,addr = sk.accept()  ###等待来电 三次握手完毕
    #     while True:
    #         inp = input('')
    #         conn.send(inp.encode('utf-8'))  ##发送数据
    #         if inp == 'q':break
    #         ret = conn.recv(1024).decode('utf-8') ###接收数据
    #         print(ret)
    #         if ret == 'q':break
    #     conn.close()
    # sk.close()
    
    ##########################tcp-client##############################
    # sk = socket.socket()
    # sk.connect(('127.0.0.1',9000))
    # while True:
    #     ret = sk.recv(1024).decode('utf-8')
    #     print(ret)
    #     if ret == 'q':break
    #     inp = input('')
    #     sk.send(inp.encode('utf-8'))
    #     if inp == 'q': break
    # sk.close()
     1 #########################udp-server######################
     2 # sk = socket.socket(type=socket.SOCK_DGRAM)
     3 # sk.bind(('127.0.0.1',8999))
     4 # while True:
     5 #     msg,addr = sk.recvfrom(1024)
     6 #     print(msg.decode('utf-8'),addr)
     7 #     inp = input('>>>')
     8 #     sk.sendto(inp.encode('utf-8'),addr)
     9 # sk.close()
    10 
    11 #########################udp-client###############################
    12 # sk = socket.socket(type=socket.SOCK_DGRAM)
    13 # while True:
    14 #     inp = input('>>>')
    15 #     sk.sendto(inp.encode('utf-8'),('127.0.0.1',8999))
    16 #     msg,addr = sk.recvfrom(1024)
    17 #     print(msg.decode('utf-8'))
    18 # sk.close()
     1 ################################粘包-server######################################
     2 # from socket import *
     3 # sk=socket()
     4 # sk.bind(('127.0.0.1',8080))
     5 # sk.listen(5)
     6 # conn,addr=sk.accept()
     7 # data1=conn.recv(10)
     8 # data2=conn.recv(3)
     9 # print('----->',data1.decode('utf-8'))
    10 # print('----->',data2.decode('utf-8'))
    11 # conn.close()
    12 # sk.close()
    13 #粘包只会发生在tcp协议中
    14 #在连续send中才会发生粘包现象
    15 #tcp传输中有三种机制:
    16     #回执 机制 保证数据能够被完整的发送
    17     #数据包过大 自动拆分的机制
    18     #数据包过小 自动合并的机制
    19 
    20 
    21 #########################粘包-client###############################
    22 # BUFSIZE=1024
    23 # ip_port=('127.0.0.1',8080)
    24 # s=socket.socket()
    25 # res=s.connect_ex(ip_port)
    26 # s.send('hello'.encode('utf-8'))
    27 # s.send('egg'.encode('utf-8'))
    28 # s.close()
     1 ###############################解决粘包问题-server###############################
     2 # sk = socket.socket()
     3 # sk.bind(('172.0.0.1',8080))
     4 # sk.listen()
     5 #
     6 # coon,addr = sk.accept()
     7 # coon.send(b'11')
     8 # coon.send(b'hello world')
     9 # coon.send(b'alex')
    10 # coon.close()
    11 # sk.close()
    12 #############################struck模块###################################
    13 # import struct
    14 #
    15 # sk = socket.socket()
    16 # sk.bind(('172.0.0.1',8080))
    17 # sk.listen()
    18 #
    19 # coon,addr = sk.accept()
    20 # inp = input('>>>').encode('utf-8')
    21 # ret = struct.pack('i',len(inp))
    22 # coon.send(ret)
    23 # coon.send(inp)
    24 # coon.close()
    25 # sk.close()
    26 
    27 
    28 ############################ 解决粘包问题##################
    29 import struct
    30 sk = socket.socket()
    31 sk.connect(('127.0.0.1',8080))
    32 
    33 num = sk.recv(4).decode('utf-8')
    34 num = struct.unpack('i',num)[0]
    35 print(sk.recv(num))
    36 sk.close()
  • 相关阅读:
    开发报表的先进工具
    强大的报表前端展现功能
    管理驾驶舱监控大屏展现
    换乘算法【转】
    提交中文数据乱码问题总结
    重定向
    容易遗漏的
    jsp基础语法【转】
    说说Java NIO【转】
    Java读取大文件的操作【转】
  • 原文地址:https://www.cnblogs.com/tewu/p/9156491.html
Copyright © 2020-2023  润新知