tcp和udp區別:
1.tcp面向連線; udp是不面向連線;
2.tcp提供可靠的資料傳輸,也就是說,通過tcp連線傳送的資料,無差錯,不丟失,不重複,且按序到達;udp不保證可靠的資料傳輸,容易出現丟包情況;
3.tcp需要連線傳輸速度慢,udp不需要連線傳輸速度快
4.tcp不支援發廣播;udp支援發廣播
5.tcp對系統資源要求較多,udp對系統資源要求較少。
6.tcp適合傳送大量資料,udp適合傳送少量資料
7.tcp有流量控制,udp沒有流量控制
tcp網路程式流程
「tcp網路程式傳送資料需要建立連線」
流程圖如下
tcp客戶端示例**
import socket
# 建立tcp客戶端套接字
tcp_client_socket = socket.socket(socket.af_inet, socket.sock_stream)
# 輸入服務端位址和埠號
server_ip = input("請輸入伺服器ip:")
server_port = int(input("請輸入伺服器port:"))
# 鏈結伺服器
tcp_client_socket.connect((server_ip, server_port))
# 提示使用者輸入資料
data = input("請輸入要傳送的資料:")
tcp_client_socket.send(data.encode("gbk"))
# 接收對方傳送過來的資料,最大接收2048個位元組
recvdata = tcp_client_socket.recv(2048)
print('接收到的資料為:', recvdata.decode('gbk'))
# 關閉套接字
tcp_client_socket.close()
tcp客戶端執行結果:
請輸入伺服器ip:10.10.0.88
請輸入伺服器port:9999
請輸入要傳送的資料:吃飯了麼
接收到的資料為: 今天天氣不錯
tcp服務端
乙個簡單的tcp伺服器示例**
import socket
# 建立tcp服務端套接字
tcp_server_socket = socket(socket.af_inet, socket.sock_stream)
# 本地資訊(""表示不指定ip位址)
address = ("", 7788)
tcp_server_socket.bind(address)
# 設定監聽
# 使用socket建立的套接字預設的屬性是主動的,使用listen將其變為被動的,這樣就可以接收別人的鏈結了
# 64:表示最大等待連線數
tcp_server_socket.listen(64)
# 如果有新的客戶端來鏈結伺服器,那麼就產生乙個新的套接字專門為這個客戶端服務
# client_socket用來為這個客戶端服務
# tcp_server_socket就可以省下來專門等待其他新客戶端的鏈結
client_socket, clientaddr = tcp_server_socket.accept()
# 接收對方傳送過來的資料
recv_data = client_socket.recv(1024) # 接收1024個位元組
print('接收到的資料為:', recv_data.decode('gbk'))
# 傳送一些資料到客戶端
client_socket.send("thank you !".encode('gbk'))
# 關閉為這個客戶端服務的套接字,只要關閉了,就意味著為不能再為這個客戶端服務了,如果還需要服務,只能再次重新連線
client_socket.close()
網路傳輸筆記(TCP)
以下內容來自個人理解,資料 是中科院計算所老師講課 打破腦袋記不住怎麼辦!連線方埠任意 被連線方埠固定 握手三步走 傳送fin資料報 表示己方不再傳送資料 對方仍需要對接收資料進行確認 tcp是乙個全雙工傳輸協議 未收到ack表示丟包了,但是這個未收到ack有乙個時間閾值,較大或較小時的影響如下 較...
TCP網路傳輸「粘包」問題
原文出處 http www.ciw.com.cn 當前在網路傳輸應用中,廣泛採用的是tcp ip通訊協議及其標準的socket應用開發程式設計介面 api tcp ip傳輸層有兩個並列的協議 tcp和udp。其中tcp transport control protocol,傳輸控制協議 是面向連線的...
TCP網路傳輸 粘包 問題
解決tcp網路傳輸 粘包 問題http www.ciw.com.cn 當前在網路傳輸應用中,廣泛採用的是tcp ip通訊協議及其標準的socket應用開發程式設計介面 api tcp ip傳輸層有兩個並列的協議 tcp和udp。其中tcp transport control protocol,傳輸控...