0

我有一个整数,我想在 python 中将它从一个套接字发送到另一个。让我们说这个整数a = 2。我如何通过连接将此整数发送到套接字。目前,我已经完成了以下代码:

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


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

但是对 int() 的调用给了我错误,说它的长度无效。我基本上没有得到在 recv() 方法中放入什么参数。

4

2 回答 2

1

您正在跨行发送一个 4 字节整数,但您试图接收 512 个字节,所以它只是分配一个未分配的内存位,如下所示:

0000000000000000000000000000 [...剪掉更多字节...]

....它收到的字节,所以它看起来像:

F34D5DD200000000000000000000 [...剪掉更多字节...]

所以你有一个 512 字节的字节数组,它不能转换为 int。recv(4) 代替,或者更好的是使用处理动态长度的协议(这是解决这个问题的唯一真正稳定的解决方案,你不能指望 recv(4) 解决这个问题)。

于 2012-10-04T12:34:24.337 回答
0

如果您使用 TCP 连接,您应该记住它是一个流协议,因此没有任何固定大小的消息。这意味着当您调用时,recv您获得的字节数可能少于请求的字节数,甚至比单次调用发送的字节数还要少send。如果有更多来电,您也可以收到所有请求send

所有这一切意味着您的调用recv可能只返回已发送的字符串的一部分,或者更多。无论哪种方式,收到的字符串显然都不是有效的整数。要查看您真正收到的内容,您应该打印它。

于 2012-10-04T12:33:25.207 回答