Python 逐行讀取socket中的數據

今天在做一個項目的時候用到了Socket,但在讀取數據的時候發現,服務器發來的TCP包被切包了,於是需要逐行讀取,未滿一行則繼續等待下一包數據。

需求有了,但是如何實現呢?

常規的readline()方法是對文件使用的,方法見此篇博文。而此處是一個Socket,直接對Socket使用的話會報錯,說不支持的類型。

詢問度娘無果,遂問於谷哥。

得知Socket有一個方法函數,可以將Socket封裝成一個文件,從而使用文件的readline()方法,研究Python Doc如下:

大體意思是:

此方法將返回一個和Socket相關的文件對象。文件對象引用的Socket文件描述符的dup()版本,所以文件對象和Socket對象可以被獨立的關閉或垃圾回收。Socket必須工作於阻塞模式(不能有超時)。mode和bufsize參數和內置的file()函數相同。注意:在Windows上,使用makefile()創建的類文件對象,不可以被一個文件描述符的文件對象使用,例如:subprocess.Popen()的流參數。


於是可以有如下使用方法:

socket.makefile().readline()


參考文章:

  1. http://www.gossamer-threads.com/lists/python/python/69275

發佈了24 篇原創文章 · 獲贊 0 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章