TCP簡介:
●TCP 面向連接、可靠的、基于字節流的傳輸控制協議
●TCP的特點
????????○面向連接
????????○可靠傳輸
????????????????■應答機制
????????????????■超時重傳
????????????????■錯誤校驗
????????????????■流量管控
●TCP通信模型
TCP嚴格區分客戶端、服務端
?tcp通信模型:
?客戶端代碼:
# 1﹑導入socket模塊
import socket# 2·創建socket套接字
tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 3·建立tcp連接(和服務端建立連接)
address = ("192.168.52.2", 8080)
tcp_client_socket.connect(address)
# 4·開始發送數據(到服務端)
tcp_client_socket.send("你好,世界!".encode("gbk"))
# 接收數據:二進制數據
recv_data = tcp_client_socket.recv(1024)
recv_text = recv_data.decode("gbk")
print("收到數據:", recv_text)
# 5·關閉套接字
tcp_client_socket.close()
服務端代碼:?
1.能夠接受一個客戶端的多條信息
2.能夠接受多個客戶端連接
?目前是單線程,只有第一個客戶端斷開連接后第二個客戶端才能連接,多線程可實現多個客戶端同時連接收發消息
import socket# 1.socket創建一個套接字
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2.bind綁定ip和port,默認本地ip地址
address = ("", 10000)
tcp_server_socket.bind(address)
# 3.開啟監聽,listen使套接字變為可以被動鏈接,允許接受最大連接數
tcp_server_socket.listen(128)
while True:# 4.accept等待客戶端的鏈接,返回一個新的套接字和客戶端的ip地址端口號,此套接字負責和客戶端通信recv_data = tcp_server_socket.accept()# 5.recv/send接收發送數據new_client_socket, client_ip_port = recv_dataprint(f"{client_ip_port} 已連接……………………")while True:recv_data = new_client_socket.recv(1024)# 當接受到為空時說明客戶端已經斷開連接,服務器也應該斷開,非空即為真:if recv_data:recv_text = recv_data.decode("gbk")print(f"接收到來自{str(client_ip_port)}的信息:{recv_text}")else:print("客戶端已經斷開連接!!!!")break# 關閉本次通信連接new_client_socket.close()
# 6.關閉服務器連接
tcp_server_socket.close()