Python套接字:只能发送/接收一次消息

时间:2017-09-06 16:47:49

标签: python-2.7 sockets

每当我从客户端向服务器发送消息(反之亦然)时,我都要等到我从另一方发送消息才能注册。

server.py

B_val

client.py

loss_val

示例:

服务器发送消息

客户端没有任何事情发生

客户端发送消息

服务器和客户端都会收到他们的消息

这将一遍又一遍地发生

1 个答案:

答案 0 :(得分:1)

嗯,很明显,你必须等待#34;另一方"因为您的代码中有raw_input个调用,等待用户输入内容...

也就是说,你也可以收回1024个字节,但发送量要少得多。因此,recv()通常会挂起,直到它有足够的数据(但并非总是如此,在这种情况下它会返回更少)。请记住,通过低级套接字通信,您必须自己正确地处理消息大小/边界!

您可以就终止字节达成一致,例如" \ n"表示消息之间的边界,或者另一种策略是将每个消息前置几个字节,表示其后面的消息大小。然后你recv()确切地说那个数量。或者只为每条消息发送固定数量的数据。

剩下的是你还需要处理send()和recv()有时不发送或接收所有内容的事实:它们具有重要的返回值。使用sendallrecv MSG_WAITALL标记可以解决大多数问题,但无法保证。

首先阅读此https://docs.python.org/3/howto/sockets.html#using-a-socket