2019-08-14_Note_Day18

網絡編程

一、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()

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容