1、套接字socket簡介 Socket是應用層與TCP/UDP協議通信的中間軟體抽象層,它充當一種介面的角色!封裝了傳輸層以下的東西。 1.1基於tcp的socket通信流程圖 2.tcp服務端搭建 需求:模擬兩個手機的通話 from ipaddress import IPv4Address im ...
1、套接字socket簡介
Socket是應用層與TCP/UDP協議通信的中間軟體抽象層,它充當一種介面的角色!封裝了傳輸層以下的東西。
1.1基於tcp的socket通信流程圖
2.tcp服務端搭建
需求:模擬兩個手機的通話
from ipaddress import IPv4Address
import socket
# 1.買手機
# socket.AF_INET 指定使用的IPv4地址
# socket.SOCK_STREAM 指定是tcp協議,流式協議,這裡發過來的數據像水流粘在一起,所以會帶來粘包問題
# socket.SOCK_DGRAM 指定的是udp協議,每一份數據都有分隔,所以不會帶來粘包問題
phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 2.綁定手機卡
# 內部是參數是一個元組,第一參數為服務端自己對應的ip地址,第二個參數為需要綁定的埠
phone.bind(('127.0.0.1',8080))
# 3.開機--開啟監聽(把套接字由主動設置為被動模式)
phone.listen(5) # 5指的是半連接池的大小,最大允許128個連接
# 4.等待電話連接請求
while True: # 加上鏈接迴圈
conn ,client_addr = phone.accept()
# 返回的是一個元組,分別為,可以通過元組解包的形式得到具體的值
# conn 新的套接字,指的是服務當前的客戶端套接字
# client_addr 客戶端埠和ip地址
# 5.收/發信息
while True:
data = conn.recv(1024) # 最大接收的數據量為1024Bytes,收到的也是Bytes類型
conn.send(data.upper())
# 6.關閉電話連接conn
conn.close()
3.tcp客戶端搭建
import socket
# 1.買電話(與服務端建立連接)
phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 2.撥通服務端電話
# conneect裡面是一個元組,第一個參數是服務端綁定的ip,第二參數是服務端綁定的埠
phone.connect(('127.0.0.1',8080))
# 3.發送信息
while True:
msg = input()
if msg == 'quit':
break
phone.send(“msg”.encode('utf-8'))
phone.send('hello world'.encode('utf-8'))
# 4.接收消息
# recv_data 是接收到的數據的二進位,需要decode('utf-8')解碼獲取到數據
recv_data =phone.recv(1024)
# 5.關閉連接
phone.close()