簡體   English   中英

通過套接字發送數據后,不會將其轉換回列表

[英]After sending data over a socket, it isn't being converted back to list

這樣我就可以發送字符串了。 我要做的是或多或少發送列表的字符串表示形式。 我知道很多將列表轉換為應該能夠作為字符串發送然后轉換回的內容的信息。

#on sending
l = [1,2,3,4]
l_str = str(l)

#on receiving 
l = ast.literal_eval(received_data)

## or pickle
l = pickle.dumps([1,2,3,4])

##then
l = pick.loads(received_data)

但是,我的問題似乎是在接收和發送之間發生了一些奇怪的事情。

現在我有這個

msg = pickle.dumps([sys.stdin.readline(), person])
s.send(msg)

其中sys.stdin.readline()是在控制台中鍵入的行,person是包含某人姓名的變量。

然后我就收到了。

d1 = sock.recv(4096)
pickles = False                
try:
    d1 = pickle.loads(d1)
    pickles = True

不管我是通過第一種方法只是創建列表字符串,然后使用ast.literal_eval還是使用pickle,它都不會真正轉換回我想要的列表。

我目前有一個try語句,因為我知道有時候我實際上不會取回使用pickle或其他方法傾倒的東西,所以想法是它應該失敗,除非繼續執行。如果接收到的數據格式正確。

例如,當我嘗試解除鎖定時產生的錯誤是

 Traceback (most recent call last):
  File "telnet.py", line 75, in <module>
    d1 = pickle.loads(d1)
  File "/usr/local/lib/python2.7/pickle.py", line 1382, in loads
    return Unpickler(file).load()
  File "/usr/local/lib/python2.7/pickle.py", line 858, in load
    dispatch[key](self)
KeyError: '\r'

pickle.loads永遠不會成功,因為pickles永遠不會是True……有什么想法嗎?

編輯:我有整體解決方案。 對我來說,問題實際上不在您在錯誤中看到的文件telnet.py中,而是在另一個文件中。 我沒有意識到中間服務器正在接收輸入並對其進行更改。 但是,在提出了一些建議之后,我意識到這正是正在發生的事情。

我的問題實際上來自另一個文件。 當時我還沒有意識到,作為聊天服務器/客戶端很重要。 但是,聊天服務器實際上是在將數據發送回格式化的客戶端。.老實說,我不知道那怎么沒打中我,但這就是發生了什么。

暫無
暫無

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

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