[英]Backporting bytearray to Python 2.5
我正在嘗試將此websocket 示例轉換為在 Python 2.5 中使用,但在使用 bytearray 類型時遇到了錯誤。
代碼在此處停止適用於 Python 2.5(在websocket_server/websocket_server.py的 send_text 方法中):
FIN = 0x80
OPCODE = 0x0f
def send_text(self, message):
header = bytearray();
payload = encode_to_UTF8(message)
payload_length = len(payload)
header.append(FIN | OPCODE_TEXT)
header.append(payload_length)
self.request.send(header + payload)
message 變量存儲發送給客戶端的字符串輸入。
它嘗試創建一個字節數組並使用 self.request.send 方法發送它。 我將如何更改它以使其在沒有字節類型或字節數組的 Python 2.5 中工作?
使用 struct 可能有效,我還沒有測試過。
作為一種解決方法,我會做的是使用 struct.pack 逐字節打包。
mensaje = "saludo"
FIN = 0x80
OPCODE = 0x0f
payload = ''
for c in mensaje:
payload += struct.pack("H", ord(c))
msj = struct.pack("H",FIN | OPCODE )
msj+= struct.pack("H",len(payload))
print msj + payload
我在 struct.pack 函數中使用“H”作為“fmt”參數,但你最好檢查你的包是如何發送的以及每個“字符”有多少字節(因為我猜你正在使用 unicode,我'正在使用'H',無符號短 = 2 個字節)。
更多信息: https ://docs.python.org/2/library/struct.html,第 7.3.2.1 和 7.3.2.2 節。
編輯:我會在這里回答,使用“chr()”而不是“struct.pack()”是什么意思:
mensaje = "saludo"
FIN = 0x80
OPCODE = 0x0f
payload = mensaje
msj = chr( FIN | OPCODE )
msj+= chr(len(payload))
print msj + payload
如果您打印的消息,那么您在使用時會看到相同的輸出struct.pack("B", ord(something))
使用時,比ord(something)
,我只是用struct.pack(),因為我認為你的信息是每個字符兩個字節(作為 unicode)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.