Python Socket:了解資料回傳行為的影響
最初,官方文件中的 Python echo 伺服器範例運作完美。然而,在修改程式碼以消除將資料發送回客戶端後,出現了問題。第二次呼叫 socket.recv() 方法沒有回傳。
不同的實現,不同的結果
文件中的原始程式碼使用了一個while 迴圈:
conn.sendall(data) pre><br>這一行暗示伺服器會將收到的資料回顯給客戶端,直到客戶端關閉其連線。 <p>在修改後的程式碼中,行為變更如下:<br></p><pre class="brush:php;toolbar:false">break
當第二次呼叫conn.recv(1024) 方法時,它會立即終止,沒有留下可用的資料客戶端。
TCP 流的本質
要理解這種行為,必須掌握 TCP 流的本質。它們以連續流傳輸數據,客戶端和伺服器操作之間沒有直接關聯。此外,協定決定了底層的通訊規則。
在原始程式碼中,協定規定伺服器將回顯它收到的每個資料包,直到客戶端關閉其傳出連線。關閉後,伺服器將關閉其套接字。
修改後的協議和客戶端調整
修改後的程式碼引入了一個新協議,伺服器將丟棄傳入的數據,直到客戶端關閉其傳出連接。隨後,伺服器將發送“ok”並關閉其套接字。
為了讓客戶端使用這個新協議,有必要:
- 關閉客戶端的傳出連線指示完成。
- 實作多個recv() 呼叫以解決資料中潛在的碎片問題
更新的伺服器和客戶端
以下更新的程式碼範例示範了修訂後的協定實作:
伺服器:
導入套接字<p>HOST = ''<br>PORT = 50007 <br>s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)<br>s.setsock .SOL_SOCKET, socket.SO_REUSEADDR, 1)<br>s.bind((主持人, PORT))<br>s.listen(1)</p><p>conn, addr = s.accept()<br>print('連接者', addr)</p><p>while True:</p><pre class="brush:php;toolbar:false">data = conn.recv(1024) if not data: break
conn.sendall(b'ok')
conn.shutdown(socket.SHUT_WR)
conn.close()
客戶端:
導入插座
HOST = 'localhost'
PORT = 50007
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(HOST, PORTet.SOCK_STREAM)
s.connect(HOST, PORT)) (你好, world')
s.shutdown(socket.SHUT_WR)
data = b''
while True:
data = conn.recv(1024) if not data: break
s.close()
print('已收到' , repr(data))
透過這些修改後的實現,伺服器有效地丟棄傳入的數據,允許客戶端在關閉後接收其回應。
以上是為什麼刪除從 Python Socket 伺服器回顯的資料會導致 `socket.recv()` 在後續呼叫中不回傳任何內容?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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

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

Python 對象的序列化和反序列化是任何非平凡程序的關鍵方面。如果您將某些內容保存到 Python 文件中,如果您讀取配置文件,或者如果您響應 HTTP 請求,您都會進行對象序列化和反序列化。 從某種意義上說,序列化和反序列化是世界上最無聊的事情。誰會在乎所有這些格式和協議?您想持久化或流式傳輸一些 Python 對象,並在以後完整地取回它們。 這是一種在概念層面上看待世界的好方法。但是,在實際層面上,您選擇的序列化方案、格式或協議可能會決定程序運行的速度、安全性、維護狀態的自由度以及與其他系

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

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

該教程建立在先前對美麗湯的介紹基礎上,重點是簡單的樹導航之外的DOM操縱。 我們將探索有效的搜索方法和技術,以修改HTML結構。 一種常見的DOM搜索方法是EX

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

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


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

禪工作室 13.0.1
強大的PHP整合開發環境

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

SublimeText3漢化版
中文版,非常好用