我有一个整数,我想在 python 中将它从一个套接字发送到另一个。让我们说这个整数a = 2。我如何通过连接将此整数发送到套接字。目前,我已经完成了以下代码:
server_socket.send(str(a)) #Server side
b=int(client_socket.recv(512)) #Client side
但是对 int() 的调用给了我错误,说它的长度无效。我基本上没有得到在 recv() 方法中放入什么参数。
您正在跨行发送一个 4 字节整数,但您试图接收 512 个字节,所以它只是分配一个未分配的内存位,如下所示:
0000000000000000000000000000 [...剪掉更多字节...]
....它收到的字节,所以它看起来像:
F34D5DD200000000000000000000 [...剪掉更多字节...]
所以你有一个 512 字节的字节数组,它不能转换为 int。recv(4) 代替,或者更好的是使用处理动态长度的协议(这是解决这个问题的唯一真正稳定的解决方案,你不能指望 recv(4) 解决这个问题)。
如果您使用 TCP 连接,您应该记住它是一个流协议,因此没有任何固定大小的消息。这意味着当您调用时,recv
您获得的字节数可能少于请求的字节数,甚至比单次调用发送的字节数还要少send
。如果有更多来电,您也可以收到所有请求send
。
所有这一切意味着您的调用recv
可能只返回已发送的字符串的一部分,或者更多。无论哪种方式,收到的字符串显然都不是有效的整数。要查看您真正收到的内容,您应该打印它。