簡體   English   中英

將tcp客戶端套接字類從python2轉換為python3

[英]converting a tcp client socket class from python2 to python3

我需要編寫一個在后台運行的tcp客戶端。 我找到了一個有趣的類,該類恰好滿足了我在此鏈接上的需要: 代碼示例套接字客戶端線程 我想在我的項目中實現它,因為我發現它比標准庫中的示例或PyMOTW-3中的模塊更好 問題是,它是用Python2編寫的,並且我用這種方法不斷出錯:

def _recv_n_bytes(self, n):
    data = ''
    while len(data) < n:
        chunk = self.socket.recv(n - len(data))
        print(chunk)
        if chunk == '':
            break
        data += chunk
    return data

在研究過程中,我意識到Py2和Py3在字符串解釋方面有不同的行為。 因此,我基本上已經嘗試過將“數據”或“塊”進行解碼/編碼('UTF-8')的任何組合,但總而言之,我總是以這種方式結束chunk = self.socket.recv(n - len(data)) ,在那里我得到一個通用的“ MemoryError”(沒有進一步的描述)!

有人知道發生了什么嗎? 或者,有人可以建議我使用一個現成的類來為tcp客戶端連接設置單獨的線程嗎?

謝謝。

最近我自己玩插座,我遇到了同樣的問題。 您應該做的是對要發送給接收器的所有數據進行編碼,並對要在客戶端接收的任何數據進行解碼。

所以你應該使用一些可以影響chunk = self.socket.recv(n - len(data)).decode()

在發送方,您應該這樣編碼: socket.send(data.encode())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM