首页 > 编程语言 > 详细

python-python基础8(断言,socket进阶)

时间:2020-03-01 20:24:09      阅读:57      评论:0      收藏:0      [点我收藏+]

一、断言

assert断言语句用来声明某个条件是真的,其作用是测试一个条件(condition)是否成立,如果不成立,则抛出异。

一般来说在做单元测试的时候用的比较多,在生产环境代码运行的情况下,不建议使用断言,会让程序abort掉。

什么时候使用断言:
  • 保护性的编程 正常情况下,并不是防范当前代码发生错误,而防范由于以后的代码变更发生错误。
  • 运行时序逻辑的检查 这种情况一般都是很严重的,防止脏数据或者异常数据进入业务系统,主动进行中断处理
  • 单元测试代码 开发或测试人员编写单元测试代码的时候,也会使用断言
data="kobe bryant"

assert type(data) is str
print("断言正确")

上面的例子就是判断data的类型是不是str,如果是,程序就会继续执行,如果不是,那么在assert的时候就会直接报错

 

二、socket进阶

服务端或客户端在接收数据时,有一个缓冲区,我们可以定义它的大小,如果接收到的数据超过这个大小,那么下一次接收的数据还是上一次没接收完的数据,我们把缓冲区大小改的很大是不科学的,因为我们不知道接收的数据会有多大。所以用循环接收的办法,直到接收完所有数据才打印,具体看以下例子。

server:

import socket,os,time

server=socket.socket()
server.bind(("localhost",9999))

server.listen()
print("service is start,listening...")

while True:
    conn,addr=server.accept()
    print("From {0} connect successfully.".format(addr))

    while True:
        data=conn.recv(1024)
        if not data:
            break               #客户端断开就是没有数据传过来,那就跳出循环等待下一次连接
        data_de=data.decode(utf-8)
        re_data=os.popen(data_de).read()
        print(len(re_data.encode()))     #打印结果数据的大小
        conn.send(str(len(re_data.encode())).encode())      #将结果数据的大小发送给客户端
        client_ack=conn.recv(1024)                     #防止粘包,收到一个确认数据后,再往下执行,这种方法比sleep好,没有延迟
        print("client_ack:", client_ack.decode())      
    #   time.sleep(1)
        conn.send(re_data.encode())     #发送具体的结果数据

server.close()

client:

import socket

client=socket.socket()
client.connect(("localhost",9999))
print("connect successfully")

while True:
    common=input(">>:")
    if len(common) == 0:continue
    client.send(common.encode())
    print("命令已发送")

    recv_size_en=client.recv(1024)     #接收结果大小
    client.send("发送确认,已收到数据大小".encode())     #发送确认数据,防止粘包
    recv_size=int(recv_size_en.decode())
    print("命令结果大小:",recv_size)
    data_size=0
    recv_data=b‘‘   #空字节
    while data_size<recv_size:
        data=client.recv(1024)    #接收结果
        data_size+=len(data)
        print("接收到{0}字节的数据".format(data_size))
        recv_data+=data
    else:
        print("总共接收到{0}字节的数据".format(data_size))
        print(recv_data.decode())

client.close()

 

 

 

 

 

 

 

python-python基础8(断言,socket进阶)

原文:https://www.cnblogs.com/jehuzzh/p/12391458.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!