import re
"""
正則表達(dá)式:
1.正則符號
.
\w
\s
\d
\b
^
$
\B
\W
\S
\D
[ash] [\dabc] [a-z1-9] [^a-z]
*,+,?,{N}, {M,N}, {M,}, {,N} -- 貪婪
*?,+?,??,{M,N}?, {M,}?, {,N}? -- 非貪婪
正則1|正則2
()
2.re模塊
完全匹配: re.fullmatch()
匹配字符串開頭: re.match()
搜索: re.search()
查找: re.findall() 、re.finditer()
分割: re.split()
替換: re.sub()
"""
import socket
"""
1.什么是socket
socket又叫套接字, 指的是網(wǎng)絡(luò)通信的兩端,分別是服務(wù)器和客戶端
socket編程指的就是通過代碼實(shí)現(xiàn)客戶端和服務(wù)器之間的通信
2.服務(wù)器的實(shí)現(xiàn)
"""
# 1.創(chuàng)建套接字對象
"""
family: ip類型, AF_INET -> ipv4, AF_INET6 -> ipv6
type: 傳輸協(xié)議的類型, SOCK_STREAM -> TCP, SOCK_DGRAM -> UDP
"""
server = socket.socket()
# 2.綁定IP地址和端口
"""
ip用來區(qū)分互聯(lián)網(wǎng)上設(shè)備
端口是用來區(qū)分一臺計(jì)算上的不同的服務(wù)(應(yīng)用),值是0-65535,其中0-1024是著名端口。其他的隨便選
bind((ip地址,端口號))
"""
server.bind(('10.7.190.127', 8081))
# 3.啟動(dòng)服務(wù)器(監(jiān)聽請求)
"""
listen(數(shù)量) - 這兒的數(shù)量指的是一次性能夠處理的最大請求數(shù)
"""
server.listen(255)
# 4.讓服務(wù)器一直處于運(yùn)行狀態(tài)
while True:
print('開始監(jiān)聽....')
# 5.等待客戶端的請求
# 程序運(yùn)行到這個(gè)地方,會停下來,等到有客戶端來連接服務(wù)器,才會接著往后執(zhí)行
connect, addr = server.accept()
print(connect, addr)
# 6.發(fā)送消息
"""
send(數(shù)據(jù)) - 發(fā)送數(shù)據(jù),數(shù)據(jù)是二進(jìn)制數(shù)據(jù)
"""
message = input('>>>')
connect.send(message.encode(encoding='utf-8'))
# 7.接收消息
"""
recv(字節(jié)數(shù)) - 接收數(shù)據(jù),并且指定一次性接收的數(shù)據(jù)的大小的最大值;返回接收到的二進(jìn)制數(shù)據(jù)
"""
# 程序運(yùn)行到這個(gè)地方會停下來,直到客戶端給服務(wù)器發(fā)送消息,才會接著執(zhí)行
data = connect.recv(1024)
print('<<<:')
print(data.decode(encoding='utf-8'))
# 8.關(guān)閉連接
connect.close()
t1 = threading.Thread(target=download, args=('大國崛起',))
t2 = threading.Thread(target=download, args=('霸王別姬',))
2.讓線程開始執(zhí)行任務(wù)
"""
線程對象.start() - 開始執(zhí)行子線程中的任務(wù)
"""
t1.start()
t2.start()
download('變形金剛')
print('=======')
某個(gè)線程出現(xiàn)異常,是線程直接結(jié)束;進(jìn)程不一定結(jié)束,所有的線程都結(jié)束,進(jìn)程才會結(jié)束
print([1, 2][10])
print('+++++++++++')