網絡編程
一、socket
1. 什么是socket編程
socket又叫套接字,指的是實現通信的兩個端
這兩個端有分為服務器套接字和客戶端套接字
2. 服務器套接字
python中提供了一個socket模塊來支持socket編程
1) 創建套接字對象
socket(family=AF_INET,type=SOCK_STREAM)
family
: 設置ip類型AF_INET : ipv4
AF_INET6 : ipv6
type
: 設置數據的傳輸方式SOCK_STREAM : TCP
SOCK_DGRAM : UDP
server = socket.socket()
2)綁定ip和端口
bind((ip地址, 端口號))
ip地址
: 字符串(服務器程序運行的計算機ip)
端口號
: 整型(范圍是065535,其中01024是有特殊作用的著名端口,一般不使用)
server.bind(('10.7.181.116', 8888))
3) 等待連接
listen(backlog: int)
backlog
: 設置統一時間能夠接收的請求數量
server.listen(512)
4) 讓服務器保持一致運行的狀態
5) 接收請求
注意
:當程序執行到accept()時會阻塞線程,直到有客戶端給當前服務器發送請求為止
while True:
print('開始監聽')
connect, address = server.accept()
print('接收到請求')
print(connect, address)
6) 接收客戶端發送的數據
recv(數據大小) : 接收數據并且設置一次性能夠接收的最大數據大小
補充
:二進制轉字符串
二進制對象.decode(encoding='utf-8')
str(二進制對象, encoding='utf-8')
recv_data = connect.recv(1024)
# print('接收:', recv_data.decode(encoding='utf-8'))
print('接收:', str(recv_data, encoding='utf-8'))
7) 給客戶端發送數據
send(數據) : 發送數據的類型必須是bytes
connect.send('HTTP/1.1 200 OK\r\n\r\n hello socket'.encode())
8) 關閉連接
connect.close()
3. 客戶端套接字
1)創建客戶端對象
client = socket.socket()
2) 發送請求
connect((ip地址, 端口號))
client.connect(('10.7.181.116', 8888))
3) 發送消息
message = input('客戶端:')
client.send(message.encode())
4) 接收消息
re_data = client.recv(1024)
print('客戶端接收:', re_data.decode(encoding='utf-8'))
5) 關閉連接
client.close()