TCP傳輸控制協議介紹和使用

2021-09-25 15:02:28 字數 2425 閱讀 4471

socket的概念

socket(簡稱套接字)是程序之間的乙個通訊工具,好比現實生活中的插座,程序之間想要進行網路通訊需要基於這個socket。

socket作用:負責程序之間的網路資料傳輸,好比資料的搬運工

程序之間的網路資料的傳輸可以通過socket來完成,socket就是程序間網路資料通訊的工具

tcp網路應用程式開發流程

tcp網路應用程式開發分為:tcp客戶端程式開發,tcp服務端程式開發

客戶端程式是指執行在使用者裝置上的程式,主動發起簡歷連線請求

服務端程式是指執行在服務裝置上的程式,專門為客戶端提供資料服務,等待接受連線請求

tcp客戶端開發流程介紹

1-建立客戶端套接字物件

2-和服務端套接字建立連線

3-傳送資料

4-接收資料

5-關閉客戶端套接字

tcp客戶端程式開發**示例:

import socket

ifname== 『main』:

# 建立tcp客戶端套接字

# 1. af_inet:表示ipv4

# 2. sock_stream: tcp傳輸協議

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

# 和服務端應用程式建立連線

tcp_client_socket.connect((「192.168.131.62」, 8080))

# **執行到此,說明連線建立成功

# 準備傳送的資料

send_data = 「你好服務端,我是客戶端小黑!」.encode(「gbk」)

# 傳送資料

tcp_client_socket.send(send_data)

# 接收資料, 這次接收的資料最大位元組數是1024

recv_data = tcp_client_socket.recv(1024)

# 返回的直接是服務端程式傳送的二進位制資料

print(recv_data)

# 對資料進行解碼

recv_content = recv_data.decode(「gbk」)

print(「接收服務端的資料為:」, recv_content)

# 關閉套接字

tcp_client_socket.close()

tcp服務端程式開發流程介紹

1-建立服務端套接字物件 (socket.socket(socket.af_inet, socket.sock_stream))

sf_inet表示ipv4位址型別

sock_stream 表示tcp傳輸協議型別

2-繫結埠號 (bind(『ip位址』,埠號))

3-設定監聽 (listen(最大等待連線個數))

4-等待接受客戶端的連線請求(accept)

5-接收資料(recv(每次接收資料的大小),單位是位元組,使用decode進行解碼)

6-傳送資料(send,要傳送二進位制資料,使用encode進行編碼)

7-關閉套接字

str.encode(編碼格式),表示把字串編碼成為二進位制

data.decode(編碼格式),表示把二進位制解碼成為字串

當客戶端與服務端建立連線後,服務端程式推出後不會立即釋放,需要等待大概1-2分鐘,解決辦法有兩種:

1-更換服務端埠號

2-設定埠號復用,讓服務端程式退出後埠號立即釋放

如下:tcp_server_setsockopt(socket.sol_socket,socket.so_reuseaddr,ture)

tcp服務端**示例

import socket

tcp網路應用程式注意點:

1-當 tcp 客戶端程式想要和 tcp 服務端程式進行通訊的時候必須要先建立連線

2-tcp 客戶端程式一般不需要繫結埠號,因為客戶端是主動發起建立連線的。

3-tcp 服務端程式必須繫結埠號,否則客戶端找不到這個 tcp 服務端程式。

4-listen 後的套接字是被動套接字,只負責接收新的客戶端的連線請求,不能收發訊息。

5-當 tcp 客戶端程式和 tcp 服務端程式連線成功後, tcp 伺服器端程式會產生乙個新的套接字,收發客戶端訊息使用該套接字。

6-關閉 accept 返回的套接字意味著和這個客戶端已經通訊完畢。

7-關閉 listen 後的套接字意味著服務端的套接字關閉了,會導致新的客戶端不能連線服務端,但是之前已經接成功的客戶端還能正常通訊。

8-當客戶端的套接字呼叫 close 後,伺服器端的 recv 會解阻塞,返回的資料長度為0,服務端可以通過返回資料的長度來判斷客戶端是否已經下線,反之服務端關閉套接字,客戶端的 recv 也會解阻塞,返回的資料長度也為0。

TCP 傳輸控制協議

推薦 tcp ip 簡直是程式設計師的福音 tcp 協議是 面向連線的,可靠的,流傳輸,協議。流 是指 不間斷 的資料結構,可以想象成排水管道中的水流。當應用程式採用 tcp 傳送訊息的時候,雖然可以保證傳送的順序,但是還是猶如沒有任何間隔的資料流,傳送給接收端。可以這麼理解 在傳送端,應用程式傳送...

TCP傳輸控制協議

tcp是網際網路中的傳輸層協議,使用三次握手協議建立連線。當主動方發出syn連線請求後,等待對方回答syn ack 1 並最終對對方的 syn 執行 ack 確認。這種建立連線的方法可以防止產生錯誤的連線,tcp使用的流量控制協議是可變大小的滑動視窗協議 tcp三次握手的過程如下 客戶端傳送syn ...

tcp傳輸控制協議

tcp服務 tcp是面向連線的,提供可靠的服務,對資料有校驗機制。tcp的首部 其格式如下 如上tcp的報文是tcp的首部和tcp的資料。tcp的首部是有源埠和目的埠,這個值和ip首部的源ip和目的ip構成了tcp唯一確定的乙個連線。序號是用來標示從tcp發端向tcp收端傳送的資料位元組。當建立乙個...