Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 跨套接字发送整数_Python_Sockets - Fatal编程技术网

Python 跨套接字发送整数

Python 跨套接字发送整数,python,sockets,Python,Sockets,我有一个整数,我想用python将它从一个套接字发送到另一个套接字。假设这个整数a=2。如何通过连接将此整数发送到套接字。 目前,我已经完成了以下代码: server_socket.send(str(a)) #Server side b=int(client_socket.recv(512)) #Client side 但是对int()的调用给了我一个错误,说它的长度无效。我基本上不知道在recv()方法中应该放什么参数。如果您使用的是TCP连接,您应该记住它

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

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


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

但是对int()的调用给了我一个错误,说它的长度无效。我基本上不知道在recv()方法中应该放什么参数。

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


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

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

000000000000000000000[…再剪掉一堆字节…]

..使用它接收的字节,因此它看起来像:

F34D5DD200000000000000000000[…再剪掉一堆字节…]


因此,您有一个512字节的字节数组,不能转换为int.recv(4),或者更好地使用一个处理动态长度的协议(这是这个问题唯一实际稳定的解决方案,您不能期望recv(4)来解决这个问题)。

print(client_socket.recv(512))说什么?在某个地方给出了一个错误。必须输入键盘中断,如果没有,也可以尝试ipython,调试起来要简单得多。