我有一個整數,我想從一個套接字發送到另一個python。可以說這個整數a = 2。我如何通過連接將此整數發送到套接字。 目前,我已經做了以下代碼:通過套接字發送整數python
server_socket.send(str(a)) #Server side
b=int(client_socket.recv(512)) #Client side
但調用INT()給我的錯誤,說其不有效長度。我基本上沒有得到什麼參數在recv()方法。
我有一個整數,我想從一個套接字發送到另一個python。可以說這個整數a = 2。我如何通過連接將此整數發送到套接字。 目前,我已經做了以下代碼:通過套接字發送整數python
server_socket.send(str(a)) #Server side
b=int(client_socket.recv(512)) #Client side
但調用INT()給我的錯誤,說其不有效長度。我基本上沒有得到什麼參數在recv()方法。
您發送跨線的4個字節的整數,但您要接受512個字節,所以它只是分配的內存未分配的有點像這樣:
000000000000000000000000000 [...喀嚓一堆多個字節...]
....其接收,所以它看起來像字節:
F34D5DD20000000000000000000 [...喀嚓一堆多個字節...]
所以你再有一個512字節的字節數組,無法轉換爲一個int。 recv(4),或者更好地使用處理動態長度的協議(這是解決這個問題的唯一實際穩定的解決方案,不能指望recv(4)來解決這個問題)。
謝謝。幫助過我..;) –
如果你使用TCP連接,你應該記住它是一個流媒體協議,因此沒有任何固定大小的消息。這意味着當您撥打recv
時,您可能會少於請求的字節數,甚至比單次撥打send
時發送的字節數少。如果有更多的電話撥打send
,您也可以收到您所需的全部信息。
這一切都意味着您致電recv
可能只返回部分已發送的字符串,或更多。無論哪種方式收到的字符串顯然無效的整數。要看你真的收到你應該打印它。
print(client_socket.recv(512))是什麼意思? –
在某處出現錯誤。必須把鍵盤中斷 –
也試試ipython如果你沒有,更簡單的調試。 –