day18-網(wǎng)絡(luò)編程
一、socket服務(wù)器
1. 什么是socket
- socket又叫套接字,指的是實(shí)現(xiàn)網(wǎng)絡(luò)通信的兩端
2. 服務(wù)器套接字
-
1)創(chuàng)建套接字對象
server = socket.socket()socket(family=AF_INET, type=SOCK_STREAM)
family:設(shè)置ip類型;AF_INET:ipv4;AF_INET6:ipv6
type:設(shè)置傳輸協(xié)議類型;SOCK_STREAM:TCP傳輸協(xié)議;SOCK_DGRAM:UDP傳輸協(xié)議
-
2)綁定IP和端口
server.bind(('10.7.160.57', 1234))bind(address):綁定地址
address:元組(IP地址,端口)
ip地址:通過ip地址可以確定互聯(lián)網(wǎng)中唯一的一臺計(jì)算機(jī)(字符串),運(yùn)行服務(wù)器程序的計(jì)算機(jī)的ip地址
端口:端口是用來區(qū)分同一臺計(jì)算機(jī)中的不同服務(wù),范圍是0-65535,其中0-1024是著名端口,不能隨便使用
-
3)開始監(jiān)聽,同時(shí)設(shè)置最大在線客戶端個(gè)數(shù)(設(shè)置同時(shí)在線人數(shù))
- server.listen(200)
4)讓服務(wù)器一直處于啟動狀態(tài)(通過死循環(huán)方式)
-
5)接收請求,返回建立的連接和客戶端的地址
connection, addr = server.accept()- 注意:當(dāng)代碼執(zhí)行到這里的時(shí)候,會阻塞線程
-
6)接收客戶端發(fā)送的消息
re_data = connection.recv(1024)recv(一次性能夠接收的最大值):返回值是接收到的數(shù)據(jù),類型是二進(jìn)制
re_message = re_data.decode(encoding='utf-8')二進(jìn)制數(shù)據(jù)和字符串的轉(zhuǎn)換
a.二進(jìn)制轉(zhuǎn)字符串:
-str(二進(jìn)制數(shù)據(jù), encoding='utf-8')
-二進(jìn)制.decode(encoding='utf-8')
b.字符串轉(zhuǎn)二進(jìn)制:
-bytes(字符串, 編碼方式)
-字符串.encode()
-
7)發(fā)送消息
connection.send('hello'.encode())
-
8)關(guān)閉連接
connection.close()
二、socket客戶端
1.客戶端套接字
- 1)創(chuàng)建套接字對象
client = socket.socket()
- 2)直接連接服務(wù)器
client.connect(('10.7.160.57', 8000))- connect((服務(wù)器地址, 服務(wù)器端口))
- 3)發(fā)送消息
client.send('hello'.encode())
- 4)接收消息
re_data = client.recv(1024)re_message = re_data.decode(encoding='utf-8')
- 5)關(guān)閉連接
client.close()
三、requests的使用
1.requests
- requests是一個(gè)專門用來支持HTTP請求的一個(gè)第三方庫
- 1)獲取指定url對應(yīng)的資源,返回時(shí)響應(yīng)
response = requests.get(url)response = requests.post(url)
- 2)獲取響應(yīng)頭
response.headers
- 3)獲取內(nèi)容
- a.字符串格式的內(nèi)容
response.text
- b.獲取json內(nèi)容
response.json()
- c.獲取二進(jìn)制內(nèi)容
data = response.content
- a.字符串格式的內(nèi)容