网络数据与网络错误

字符与字符串

字节的特性:

  • 位(bit)是信息的最小单位,每位可以是0或1,在电子学中,位一般通过高电压和低电压来实现。
  • 8位组成1字节(byte).
a = 0b1100010 
print(a)
#98
0b1100010 == 0o142 == 98 == 0x62
#true

可以把这些数的列表作为参数传给bytes(),这样就能够将其转化为字节字符串,通过字节字符串,可以将其转换为原来的形式。

b = bytes([0, 1, 98, 99, 100])
len(b)
#5
print(b)
#b'\x00\x01bcd'

字符串

for i in range(32, 128, 32):
	print(' '.join(chr(j) for j in range(i, i+1)))
'''
  ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _
` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ 
'''

压缩

数据在网络中传输所需要的时间常常远远多于CPU准备数据所用的时间。因此,在发送输几局进行压缩,通常是非常值得的。

import zlib
data = zlib.compress(b'Python')+b'.'+zlib.compress(b'zlib') +b'.'
data
#b'x\x9c\x0b\xa8,\xc9\xc8\xcf\x03\x00\x08\x97\x02\x83.x\x9c\xab\xca\xc9L\x02\x00\x04d\x01\xb2.'
len(data)
#28
''' 假设这28B的数据以每个数据包8B的形式发送至接受方的,在处理完第一个数据包后,我们会发现,解压缩对象的unsed_data槽仍然是空的
表示还有数据未处理'''
d = zlib.decompressobj()
d.decompress(data[0:8]), d.unused_data
#(b'Pytho', b'')
'''因此我们希望再次运行套接字的recv()调用,当我们把第二个包含8个字符的数据块出纳递给你解压缩对象时,他除了会返回我们想要的压缩前数据外
还会返回一个非空的unused_data值,表示已经接受到了b'.'这一字节'''
d.decompress(data[8:16]), d.unused_data
('n', '.x')
'''由于我们正在等待更多压缩数据,因此会把‘x’传递给一个新的解压缩对象,然后再把两个模拟的8B数据包传递给该解压读对象'''
d = zlib.decompressobj()
d.decompress(b'x'), d.unused_data
#(b'', b'')
d.compress(data[16:24]), d.unused_data
#(b'zlib, b'')
d.decompress(data[24:]), d.unused_data
(b'', b'.')

网络异常

OSError:这是socket模块的可能抛出的主要错误,网络传输的所有阶段可能发生的任何问题几乎都会抛出异常,OSError几乎会在任何套接字调用时都
不期而至,
Socket.gaierror: 该异常在getaddinfo()无法找到提供的名称或服务时被抛出,除了显示调用getaddrinfo()时可能会抛出该异常外,如果我们想bind()或connect()
这样调用传入一个主机名而不是IP地址时该异常会被抛出。
import socket
s = socket.socket(socket.AF_INFT, socket.SOCK_STREAM)
try:
	s.connect(('nonexistent.hostname.foo.bar', 80))

socket.timeout: 有时我们决定为套接字设定超时参数,而不希望永远等待send()或recv()操作的完成。只有在此时,或是我们使用的库设定为套接字参数时,才可能抛出socket.timeout异常。

TLS/SSL

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值