TCP 套接字通訊:了解套接字行為
在Python 中使用TCP 套接字時,了解這些套接字基於流的性質至關重要連接。與發送和接收操作之間的一對一關係不同,資料流由實現的協定決定。
考慮以下簡單回顯伺服器的程式碼片段:
在其原始形式中,此程式碼與客戶端建立連接,等待來自客戶端的數據,並將其回顯,直到客戶端斷開連線。循環反覆迭代,伺服器接收並回應每個傳入訊息。
但是,假設我們修改程式碼以排除伺服器將資料傳回客戶端的步驟:
在這種情況下,recv 方法的行為會改變。當修改後的伺服器與客戶端建立連線時,它會等待資料。然而,由於沒有發送數據,recv 方法會無限期地阻塞。第二次呼叫 recv 永遠不會發生,從而阻止伺服器識別客戶端的斷開連線。
要理解此行為,必須記住 TCP 套接字作為資料流進行操作。資料的發送和接收並不直接相互關聯。管理通訊的規則由實現的協定決定。在原始程式碼中,協定規定伺服器將回顯從客戶端接收到的任何資料。
經過我們的修改,協定發生了變化。伺服器現在只接收來自客戶端的資料並丟棄它。客戶端在發送資料後期望得到回應,但修改後的伺服器保持沉默。若要解決此問題,用戶端必須透過關閉其傳出連線來明確指示其已完成傳送資料。一旦發生這種情況,伺服器會收到一個空的recv調用,將其解釋為斷開連接,並繼續發送“OK”訊息。
此外,在現實場景中,資料包在傳輸過程中可能會出現碎片。考慮到這一點,更強大的客戶端實作將執行多個 recv 調用,直到收到所有資料。
以下是解決這些問題的伺服器和客戶端程式碼的更新版本問題:
伺服器:
客戶端:
透過實施這些更改,我們確保伺服器和客戶端之間的通訊按預期運行,確認斷開連接並處理資料碎片。
以上是當伺服器不回顯接收到的資料時,TCP 套接字行為如何改變?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Linux終端中查看Python版本時遇到權限問題的解決方法當你在Linux終端中嘗試查看Python的版本時,輸入python...

本文解釋瞭如何使用美麗的湯庫來解析html。 它詳細介紹了常見方法,例如find(),find_all(),select()和get_text(),以用於數據提取,處理不同的HTML結構和錯誤以及替代方案(SEL)

Python的statistics模塊提供強大的數據統計分析功能,幫助我們快速理解數據整體特徵,例如生物統計學和商業分析等領域。無需逐個查看數據點,只需查看均值或方差等統計量,即可發現原始數據中可能被忽略的趨勢和特徵,並更輕鬆、有效地比較大型數據集。 本教程將介紹如何計算平均值和衡量數據集的離散程度。除非另有說明,本模塊中的所有函數都支持使用mean()函數計算平均值,而非簡單的求和平均。 也可使用浮點數。 import random import statistics from fracti

本文比較了Tensorflow和Pytorch的深度學習。 它詳細介紹了所涉及的步驟:數據準備,模型構建,培訓,評估和部署。 框架之間的關鍵差異,特別是關於計算刻度的

本文討論了諸如Numpy,Pandas,Matplotlib,Scikit-Learn,Tensorflow,Tensorflow,Django,Blask和請求等流行的Python庫,並詳細介紹了它們在科學計算,數據分析,可視化,機器學習,網絡開發和H中的用途

本文指導Python開發人員構建命令行界面(CLIS)。 它使用Typer,Click和ArgParse等庫詳細介紹,強調輸入/輸出處理,並促進用戶友好的設計模式,以提高CLI可用性。

在使用Python的pandas庫時,如何在兩個結構不同的DataFrame之間進行整列複製是一個常見的問題。假設我們有兩個Dat...

文章討論了虛擬環境在Python中的作用,重點是管理項目依賴性並避免衝突。它詳細介紹了他們在改善項目管理和減少依賴問題方面的創建,激活和利益。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

Atom編輯器mac版下載
最受歡迎的的開源編輯器

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)