2012-10-04 188 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可能只返回部分已发送的字符串,或更多。无论哪种方式收到的字符串显然无效的整数。要看你真的收到你应该打印它。