1.socket
socket編程(套接字):指的就是通過代碼來實現(xiàn)通信的兩個端(服務(wù)器,客戶端)
socket一般可以基于TCP和UDP實現(xiàn)客戶端和服務(wù)器之間的可靠傳輸和不可靠傳輸
python中的內(nèi)置模塊socket可以支持socket編程
2.socketServer
2.1.創(chuàng)建服務(wù)器套接字對象
family:確定服務(wù)器類型
AF_INET --> ipv4
AF_INEt6 --> ipv6
type: 確定傳輸協(xié)議類型
SOCK_STREAM --> TCP協(xié)議
SOCK_DGRAM --> UDP協(xié)議
"""
# server = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
server = socket.socket()
2.2.綁定ip地址和端口
地址個數(shù):(ip地址字符串, 端口號)
端口號是用來區(qū)分一個計算機中不同的服務(wù),范圍0-65535:
注意,1.其中0-1024是'著名端口',用來綁定一些特殊的服務(wù)的,一般不使用。
2.同一時間一個端口只能綁定一個服務(wù)
"""
server.bind(('10.7.181.81', 8080))
2.3.監(jiān)聽請求
"""
參數(shù):用來限制一次性能夠接收客戶端請求的數(shù)量,
"""
server.listen(50)
2.4.接收和發(fā)送數(shù)據(jù)
# 保證服務(wù)器一種處于啟動狀態(tài)
while True:
# 4.接收客戶端的請求
"""
accept()會阻塞線程,當(dāng)有客戶端給服務(wù)器發(fā)送請求,才會開始執(zhí)行
"""
client, addr = server.accept()
print(addr)
# 5.給客戶端發(fā)送消息
"""
seng(數(shù)據(jù)):數(shù)據(jù)必須是二進制數(shù)據(jù)(bytes)類型
字符串轉(zhuǎn)二進制:
bytes(字符串, encoding='utf-8')
字符串.encode()
"""
test = input('>>>')
client.send(test, encoding='utf-8')
# client.send('HTTP/1.1.200 OK\r\n\r\n'.encode(encoding='utf-8'))
# client.send(bytes('hello', encoding='utf-8'))
# client.send('python'.encode(encoding='utf-8'))
# 接收從客戶端發(fā)來的消息
"""
bufsize:設(shè)置緩存大小(單位是字節(jié))
1024字節(jié) -> 1k
1024k -> 1M
1024M -> 1G
1024G -> 1T
1024T -> 1P
二進制(bytes)轉(zhuǎn)換字符串
a.str(二進制數(shù)據(jù), encoding='utf-8')
b.二進制數(shù)據(jù).decode(encoding='utf-8')
"""
data = client.recv(1024)
str1 = str(data, encoding='utf-8')
str2 = data.decode(encoding='utf-8')
print(str1)
# 6.關(guān)閉連接
client.close()
3.socketClient
import socket
if __name__ == '__main__':
# 1.創(chuàng)建套接字對象
client = socket.socket()
# 2.連接服務(wù)器
client.connect(('10.7.181.81', 8080))
# 3.接收信息
data = client.recv(1024)
print('接收到服務(wù)器的數(shù)據(jù):', data.decode(encoding='utf-8'))
# 4.發(fā)送信息
test = input('請輸入:')
client.send('test'.encode(encoding='utf-8'))
4 HTTP
服務(wù)器:python\java\php等
HTTP(為了可以讓客戶端和服務(wù)器能夠進行有效的數(shù)據(jù)交流)
URL:統(tǒng)一資源定位符,能找到互聯(lián)網(wǎng)上唯一的一個資源
URL的基本格式=協(xié)議://主機地址/路徑
客戶端:網(wǎng)頁(js)、ios設(shè)備上的軟件(OC/Swift)、安卓設(shè)備上的軟件(java)
file:訪問本地計算機上的資源,格式:file://(不用加主機地址)
HTTP:不管是移動客戶端還是pc端,訪問遠程的網(wǎng)絡(luò)資源經(jīng)常
使用HTTP協(xié)議
簡單快速
靈活(可以傳輸各種數(shù)據(jù))
請求方法
GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT
GET的安全性比POST要差些,如果包含機密建議用POST
如果僅僅是索取數(shù)據(jù),使用GET
全用POST
# python中獲取網(wǎng)絡(luò)中的數(shù)據(jù);讀三方庫request
from requests import request
if __name__ == '__main__':
# 1.確定URL
# GET 請求:參數(shù)以?的形式拼接到url地址后面,參
# 數(shù)名=值的形式,多個參數(shù)用&隔開
# https://www.apiopen.top/satinApi?type=1&page=1
url='https://www.apiopen.top/satinApi?type=1&page=1'
# 2.發(fā)送請求
'''
request(請求方式,請求地址)
'''
response=request('GET',url)
print(type(response),response)
# 以字符串的形式獲取響應(yīng)體(服務(wù)器返回數(shù)據(jù))
text=response.text
print(type(text),text)
# 以json的形式獲取響應(yīng)體
json=response.json()
print(type(json),json)
# 以二進制的形式獲取響應(yīng)體
content=response.content
print(type(content),content)