2012-10-04 237 views
0

我有一個整數,我想從一個套接字發送到另一個python。可以說這個整數a = 2。我如何通過連接將此整數發送到套接字。 目前,我已經做了以下代碼:通過套接字發送整數python

server_socket.send(str(a))   #Server side 


b=int(client_socket.recv(512))  #Client side 

但調用INT()給我的錯誤,說其不有效長度。我基本上沒有得到什麼參數在recv()方法。

+0

print(client_socket.recv(512))是什麼意思? –

+0

在某處出現錯誤。必須把鍵盤中斷 –

+0

也試試ipython如果你沒有,更簡單的調試。 –

回答

1

您發送跨線的4個字節的整數,但您要接受512個字節,所以它只是分配的內存未分配的有點像這樣:

000000000000000000000000000 [...喀嚓一堆多個字節...]

....其接收,所以它看起來像字節:

F34D5DD20000000000000000000 [...喀嚓一堆多個字節...]

所以你再有一個512字節的字節數組,無法轉換爲一個int。 recv(4),或者更好地使用處理動態長度的協議(這是解決這個問題的唯一實際穩定的解決方案,不能指望recv(4)來解決這個問題)。

+0

謝謝。幫助過我..;) –

0

如果你使用TCP連接,你應該記住它是一個流媒體協議,因此沒有任何固定大小的消息。這意味着當您撥打recv時,您可能會少於請求的字節數,甚至比單次撥打send時發送的字節數少。如果有更多的電話撥打send,您也可以收到您所需的全部信息。

這一切都意味着您致電recv可能只返回部分已發送的字符串,或更多。無論哪種方式收到的字符串顯然無效的整數。要看你真的收到你應該打印它。