2014-11-24 21 views
0

Python的socket發送不發送我有麻煩了整個字符串

def main(): 
while True: 
    command = raw_input('COMMAND >> ') 
    s.sendall(command) 
    data = s.recv(4096) 
    print(data+'\n\n') 

而我只收到我發送的部分數據。 我已經嘗試在s.recv上設置更多字節,但這並沒有真正幫助,問題依然存在。

什麼似乎是問題?

+0

你爲什麼不使用sendall()的客戶端部分嗎? – Eugen 2014-11-24 22:44:05

+0

試過了,但問題仍未解決。 – 2014-11-24 22:53:50

回答

1

參考文檔https://docs.python.org/2/library/socket.html#socket.socket.send「應用程序負責檢查是否發送了所有數據;如果只傳輸了部分數據,則應用程序需要嘗試傳送剩餘的數據。」

檢查從c.send(proc)返回的值爲發送的總字節數,如果需要發送更多。

E.g.如果你發送了100個字符,並且c.send(data)返回40,那麼你需要調用c.send(data [40:]),依此類推。

或者,你也許能/想用sendall:https://docs.python.org/2/library/socket.html#socket.socket.sendall

+0

所以,我不能只設置c.send(proc [0:])?每當我收到一個字符串時,我必須檢查缺少多少字節? – 2014-11-24 22:28:58

+0

發件人(客戶)有責任檢查一切已發送,並且接收者(服務器)負責閱讀它需要的內容。它看起來像你試圖通過一個原始套接字發送結構化數據,你可能想看看使用一個簡單的RPC框架,因爲這將爲你處理很多東西。例如,https://docs.python.org/2/library/xmlrpclib.html – 2014-11-24 22:32:57

+0

姆姆。謝謝。我會仔細研究一下。 – 2014-11-24 22:37:29

相關問題