python socketserver模块详解_Python2与Python3的区别/网络基础/socketserver模块中的多线程...

一.知识点补充:

1.解释型语言和编译型语言

编译型(目前有两种解释):

先把代码编译成机器码 -> 机器寄存器去运行 :C语言

先把代码编译成XXX -> 计算机找虚拟机执行代码 -> 机器码交给计算机去执行 :C语言,JAVA,C#

解释型:

边解释边执行

2.Python中的作用域

Python中的函数是一个作用域

3.这里规定一下以后写元组的格式:

v = (1,2,3,)

1.Python中函数是一个作用域

i=0for i in range(10):pass

print(i)

结果:9

deffunc():for i in range(10):passfunc()print(i)

结果:报错2.列表生成式

val= [lambda x:x+i for i in range(10)]

ret= val[3](6)print(ret)

结果:15val= [lambda :x for x in range(10)]

ret= val[3]()print(ret)

结果:9

View Code

二.Python2和Python3的区别(必会)

1.编码&字符串

字符串:

python2:

unicode  v = u"root"  本质上用unicode存储(万国码)

(str/bytes) v = "root"    本质用字节存储

python3:

str     v = "root"    本质上用unicode存储(万国码)

bytes   v = b"root"  本质上用字节存储

编码:

python2:

ASCII

文件头可以修改: # -*- encoding:utf-8 -*-

python3:

utf-8

文件头可以修改:# -*- encoding:utf-8 -*-

注意:文件是如何存储的?

2.继承

python2:新式类/经典类

python3:新式类(继承object)

3.范围

python2:range/xrange

python3:   range

4.输入

python2:v1 = raw_input("请输入用户名: ")

python3:v2 = input("请输入用户名: ")

5.打印:

python2:print "XX"

python3:print(123)

三.网络编程

1.PC有网卡,网卡中有MAC地址

cmd -> config /all -> 物理地址即为你的MAC地址

2.局域网中路由器或交换机中的DHCP服务为我们自动分配IP地址

DHCP服务:说通俗一点,就是你在你的网卡的本地连接里设置成“自动获取IP地址”,而DHCP就是为你的网卡那个连接提供自动配置IP地址,子网掩码,网关,DNS等信息的一种服务协议,运行这种协议的就叫DHCP服务器

IP:为计算机网络相互连接进行通信而设计的协议

IPv4:互联网协议的第四版也是第一个被广泛使用,构成现今互联网即使的基础的协议,用32位0/1序列来表示,分为四段八位序列,每一段的范围是:0~255

00000000.00000000.00000000.00000000

0~255  0~255  0~255  0~255

IPv6:用来设计替代现行版本IPv4的下一代版本,使用16进制来表示,也按照8位分割,段与段之间用":"分割

00000000.00000000.00000000.00000000.00000000.00000000

子网掩码:子网掩码是一个32位地址,用于屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在远程网上;不能单独存在,必须和IP地址结合在一起使用

192.168.13.84

255.255.255.0

网关IP:如果两个IP地址,不在同一网段,这时候,要想通过IP地址访问另一网段的计算机(也是IP地址),就需要网关地址。网关地址就是出口的地址,而且,网关地址,是你最近的一个出口的地址。网关地址总是与你的计算机的IP地址是同一网段的

192.168.13.1

局域网;城域网;广域网

广播

单播

广播风暴

arp协议

View Code

3.DNS服务器

网络连接:

- 域名解析 www.luffycity.com 47.95.64.113

www.oldboyedu.com 101.200.195.98

- 连接

sk = socket.socket()

sk.connect(('47.95.64.113',80))

...

问题来了,域名和IP的对应关系在哪里?

本地:

Win本地电脑:

C:\Windows\System32\drivers\etc\hosts

11.11.11.11 luffycicy.com

Linux/Mac电脑:

/etc/hosts

DNS服务器:全球顶级DNS服务器13台

4.总结:

(1). DHCP,自动位局域网内容电脑分配IP。

(2). 网关,路由器中连接交换机的口。

(3). IP,4个点分的十进制表示 192.11.111.11

(4). 子网掩码,

IP: 192.168.13.99

掩码:255.255.255.0

将挡住的IP位数作为网段。

未挡住的部分作为可变的值。

(5). 局域网/城域网/广域网

(6). arp协议

(7). DNS

四.socketserver模块

1.初识线程:

importtimeimportthreadingdeftask(a1,a2,a3):

time.sleep(2)print('拿快递')defplay():print('和女朋友去耍')defwm():print('去拿外卖')#创建一个线程#让该线程去执行任务:函数

t1 = threading.Thread(target=task,args=(1,2,3,))#去执行吧

t1.start()#创建一个线程#让该线程去执行任务:函数

t2 = threading.Thread(target=play)#去执行吧

t2.start()#创建一个线程#让该线程去执行任务:函数

t3 = threading.Thread(target=wm)#去执行吧

t3.start()print('玩扇子')print('煽风点火')print('耍贱...')

结果:

和女朋友去耍

去拿外卖

玩扇子

煽风点火

耍贱...

拿快递

初识

2.线程执行任务:

importtimeimportthreadingdeftask(n):print('开始执行任务:',n)

time.sleep(10)print('...')print('任务%s 执行完毕:'%n)whileTrue:

name= input("请输入任务:")

t= threading.Thread(target=task,args=(name,))

t.start()

10s后

3.socket和线程的配合

importtimeimportsocketimportthreadingdeftask(conn):

time.sleep(20)

data= conn.recv(1024)print(data)

conn.close()

server=socket.socket()

server.bind(('127.0.0.1',8001,))

server.listen(5)whileTrue:

conn,addr=server.accept()

t= threading.Thread(target=task,args=(conn,))

t.start()

4.解析socketserver模块

importsocketserverclassMyServer(socketserver.BaseRequestHandler):defhandle(self):pass

#编写代码

server= socketserver.ThreadingTCPServer(('192.168.13.84',8001,),MyServer)"""server.server_address = server_address

server.RequestHandlerClass = RequestHandlerClass

server.__is_shut_down = threading.Event()

server.__shutdown_request = False

server.socket = socket....

- socket.bind

- socket.listen"""server.serve_forever()

View Code

五.赠送内容:uuid模块

importuuid

v=str(uuid.uuid4())print(v)

结果:

b4375eea-5f0d-473b-a489-f89c5e70c95d

uuid模块在Python 2.5以后引入,接口包括:不可变对象UUID(UUID类)和函数uuid1()、uuid3()、uuid4()和uuid5(),后面的四个函数用于生成 RFC 4122 规范中指定的第1、3、4、5版UUID。使用uuid1()或uuid4()可以获得一个唯一的ID,uuid1()包含了主机的网络名称,uuid4()不涉及网络主机名,仅生成一个随机UUID,因此从隐私保护角度uuid4()更加安全。

"""安装request模块

pip3 install requests"""

importthreadingimportrequestsimportuuid

url_list=['https://www3.autoimg.cn/newsdfs/g28/M05/F9/98/120x90_0_autohomecar__ChsEnluQmUmARAhAAAFES6mpmTM281.jpg','https://www2.autoimg.cn/newsdfs/g28/M09/FC/06/120x90_0_autohomecar__ChcCR1uQlD6AT4P3AAGRMJX7834274.jpg','https://www2.autoimg.cn/newsdfs/g3/M00/C6/A9/120x90_0_autohomecar__ChsEkVuPsdqAQz3zAAEYvWuAspI061.jpg',

]deftask(url):""""""

"""1. DNS解析,根据域名解析出IP

2. 创建socket客户端 sk = socket.socket()

3. 向服务端发起连接请求 sk.connect()

4. 发送数据(我要图片) sk.send(...)

5. 接收数据 sk.recv(8096)

接收到数据后写入文件。"""ret=requests.get(url)

file_name= str(uuid.uuid4()) + '.jpg'with open(file_name, mode='wb') as f:

f.write(ret.content)for url inurl_list:

t= threading.Thread(target=task,args=(url,))

t.start()

应用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值