tcp協議,傳輸控制協議(英語:transmission control protocol,縮寫為 tcp)是一種面向連線的、可靠的、基於位元組流的傳輸層通訊協議。tcp通訊需要經過建立連線、資料傳送、終止連線三個步驟。類似於日常生活中打**的場景,需要建立鏈結,確認傳送結果,安全傳輸。
tcp嚴格區分客戶端和服務端,服務端一般都需要繫結埠,否則客戶端找不到該伺服器,客戶端一般不繫結埠,如果客戶端繫結埠就會出現埠衝突導致無法多開的問題。
面向連線(確認有建立三方交握,連線已建立才作傳輸。);有序資料傳輸;重發丟失的資料報;捨棄重複的資料報;差錯的資料傳輸;阻塞/流量控制。
tcp客戶端:
# 建立套接字
tcp_client_socket = socket.socket(socket.sock_af_inet, socket.sock_stream)
# 鏈結伺服器
tcp_client_socket.connect((『server_ip』, server_port))
# 向伺服器傳送資料
tcp_client_socket.send(『hello』.encode(『utf-8』))
# 接收伺服器回送資料
recv_data = tcp_cilent_socket.recv(1024) # 返回的是位元組型別的資料
# 關閉套接字
tcp_client_socket.close()
tcp服務端:
# 建立套接字
tcp_sever_socket = socket.socket(socket.af_inet, socket.sock_stream)
# 繫結埠資訊,一定要做
tcp_server_socket.bind((「」, 7788))
# 把監聽由主動變為被動
tcp_server_socket.listen(128)
# 等待客戶端鏈結,在鏈結之前處於堵塞狀態,一直到客戶端鏈結才會解堵塞
# 返回乙個新的套接字專為客戶端服務、以及客戶端的ip、port
new_client_socket, client_addr = tcp_server_socket.accept()
# 等待客戶端傳送資料
recv_data = new_client_socket.recv(1024).decode(『utf-8』)
# 可以給客戶端回送資料
new_client_socket.send(『hello』.encode(『utf-8』))
# 為該客戶端服務完畢之後關閉套接字
new_client_socket.close()
# 關閉伺服器端套接字
tcp_server_socket.close()
listen(backlog)數值代表的含義?
監聽變主動為被動,backlog指定最多允許多少個客戶連線到伺服器。它的值至少為1。收到連線請求後,這些請求需要排隊,如果佇列滿,就拒絕請求
。請注意,最大限制是取決於作業系統,ubuntu上預設是128
tcp服務端recv解堵塞的兩種方式?
1、收到客戶端傳送的資料
2、客戶端關閉了套接字
可以通過判斷收到資料的長度來判斷客戶端是否下線,長度為0代表已下線。
網路udp通訊實現步驟及應用
udp 是user datagram protocol的簡稱,中文名是使用者資料報協議。一種無連線的傳輸層協議,提供面向事務的簡單不可靠資訊傳送服務。類似於日常生活中寫信的場景,不需要建立鏈結,不關心傳送結果。1 建立套接字 udp socket socket.socket socket.af in...
基於TCP 的網路程式設計步驟
基於tcp 伺服器端 1.建立乙個socket,用函式socket 2.繫結ip位址 埠等資訊到socket上,用函式bind 3.設定允許的最大連線數,用函式listen 4.等待來自客戶端的連線請求,用函式accept 5.收發資料,用函式send 和recv 或者read 和write 6.關...
網路程式設計之TCP應用
客戶端輸入三角形的三條邊長,判斷能否組成三角形,將三條邊傳送到伺服器端,計算三角形面積,返回給客戶端 海 式 a,b,c p a b c 2 area math.sqrt p p a p b p c 1.伺服器端 public class server dataoutputstream dos ne...