網路程式設計(TCP協議)

2021-10-02 22:24:44 字數 3674 閱讀 1547

tcp協議,傳輸控制協議(英語:transmission control protocol,縮寫為 tcp)是一種面向連線的、可靠的、基於位元組流的傳輸層通訊協議,由ietf的rfc 793定義。

tcp通訊需要經過建立連線、資料傳送、終止連線三個步驟。

tcp通訊模型中,在通訊開始之前,一定要先建立相關的鏈結,才能傳送資料,類似於生活中,「打**」"

通訊雙方必須先建立連線才能進行資料的傳輸,雙方都必須為該連線分配必要的系統核心資源,以管理連線的狀態和連線上的傳輸。

雙方間的資料傳輸都可以通過這乙個連線進行。

完成資料交換後,雙方必須斷開此連線,以釋放系統資源。

這種連線是一對一的,因此tcp不適用於廣播的應用程式,基於廣播的應用程式請使用udp協議。

1)tcp採用傳送應答機制

tcp傳送的每個報文段都必須得到接收方的應答才認為這個tcp報文段傳輸成功

2)超時重傳

傳送端發出乙個報文段之後就啟動定時器,如果在定時時間內沒有收到應答就重新傳送這個報文段。

tcp為了保證不發生丟包,就給每個包乙個序號,同時序號也保證了傳送到接收端實體的包的按序接收。然後接收端實體對已成功收到的包發回乙個相應的確認(ack);如果傳送端實體在合理的往返時延(rtt)內未收到確認,那麼對應的資料報就被假設為已丟失將會被進行重傳。

3)錯誤校驗

tcp用乙個校驗和函式來檢驗資料是否有錯誤;在傳送和接收時都要計算校驗和。

4) 流量控制和阻塞管理

流量控制用來避免主機傳送得過快而使接收方來不及完全收下。

udp通訊模型中,在通訊開始之前,不需要建立相關的鏈結,只需要傳送資料即可,類似於生活中「寫信」

udp通訊模型中,在通訊開始之前,一定要先建立相關的鏈結,才能傳送資料,類似於生活中,「打**」"

tcp客戶端,並不是像之前乙個段子:乙個顧客去飯館吃飯,這個顧客要點菜,就問服務員咱們飯店有客戶端麼,然後這個服務員非常客氣的說道:先生 我們飯店不用客戶端,我們直接送到您的餐桌上

如果,不學習網路的知識是不是 說不定也會發生那樣的笑話

所謂的服務端:就是提供服務的一方,而客戶端,就是需要被服務的一方

tcp的客戶端要比伺服器端簡單很多,如果說伺服器端是需要自己買手機、查手機卡、設定鈴聲、等待別人打**流程的話,那麼客戶端就只需要找乙個**亭,拿起**撥打即可,流程要少很多

import socket

defmain()

:# 1.建立乙個tcp套接字

tcp_socket = socket.socket(

)# 2.鏈結伺服器

server_ip =

input

("請輸入要鏈結的伺服器的ip"

) server_port =

int(

input

("請輸入要鏈結的伺服器port"))

server_addr =

(server_ip, server_port)

# 3.傳送資料/接受資料

send_data =

input

("請輸入要傳送的資料"

) tcp_socket.send(send_data.encode(

"utf-8"))

# 4.關閉套接字

tcp_socket.close(

)if __name__ ==

"__main__"

: main(

)

<1>tcp客戶端

請輸入伺服器ip:10.10.0.47

請輸入伺服器port:8080

請輸入要傳送的資料:你好啊

接收到的資料為: 我很好,你呢

<2>網路除錯助手:

如果想讓別人能更夠打通咱們的**獲取相應服務的話,需要做以下幾件事情:

如同上面的**機過程一樣,在程式中,如果想要完成乙個tcp伺服器的功能,需要的流程如下:

import socket

# 1.socket建立乙個套接字

# 2.bind繫結ip和port

# 3.listen使套接字可以被動鏈結

# 4.accept等待客戶端的鏈結

# 5.recv/send接收傳送資料

defmain()

:# 1.買個手機(socket建立乙個套接字)

tcp_server_socket = socket.socket(socket.af_inet, socket.sock_stream)

# 2.插入手機卡(繫結本地資訊,bind)

tcp_server_socket.bind((""

,7890))

# 3.將手機設定為正常的響鈴模式(讓預設的套接字由主動變為被動 listen)

tcp_server_socket.listen(

128)

print

("-----1-----"

)# 4.等待別人的**來(等待客戶端的鏈結 accept)

new_client_socket, client_addr = tcp_server_socket.accept(

)print

("------2------"

)print

(client_addr)

# ip

# 接收客服端傳送過來的請求

recv_data = new_client_socket.recv(

1024

)print

(recv_data)

# 回送一部分資料給客戶端

new_client_socket.send(

"dsdsdas-----ok-----"

.encode(

"utf-8"))

# 關閉套接字

網路程式設計之TCP協議整理

建立連線,形成傳輸資料的通道,在連線中進行大資料量的傳輸。需要通過三次握手完成連線,是可靠地協議。但是效率低。客戶端建立過程。1 建立tcp客戶端socket伺服器,使用的是socket物件,建立物件時明確目的地,以及要連線的主機。2 如果連線成功,說明資料傳輸通道已經建立。這個通道就是流,sock...

QT基於tcp協議網路程式設計

基於qt網路程式設計 基於tcp協議 c s模式程式設計 所需要的類 qtcpserver qtcpsocket 利用qt基於tcp協議編寫c s模式程式 兩個類中的訊號 qtcpserver newconnection qtcpsocket readyread connected disconne...

網路程式設計筆記 TCP協議總結

tcp協議是傳輸層中的一種面向連線的,提供可靠服務的傳輸協議,是基於位元組流傳輸的。與udp相比,它會在通訊的雙方通過建立一些資料結構來保證連線的建立。特點如下 後文,再詳細說明tcp協議如何實現這些特點。視窗大小 用作流量控制,標識自己當前能否處理的能力 如果客戶端a和伺服器b想要通過tcp協議進...