[英]Python socket not processing all commands
我一直在致力于实现UDP套接字程序(基本上是服务器/客户端类型的想法)。 我遇到了一个问题,当服务器从客户端收到一条消息时,将代码跟随到一个点,然后又停止,然后下次服务器再次从客户端收到另一条消息时,它将完成对上一个命令的处理请求,然后再次停止并重复。 这可能没有意义,但我将尝试用代码进行解释。
def receive():
conn_list = connections()
routes = []
sender = -1
read, write, errors= select.select(conn_list,[],[])
data = None
for sock in read:
data, addr = sock.recvfrom(1024)
print(data.decode('utf-8'))
print("hello")
def run():
filename = input("fielname? ")
route_table = create_table(filename)
while True:
receive()
该消息是"2. 2. 5. 15000. [4, 2]. [6, 1]"
(例如),因此每次命中服务器时控制台中的预期结果将是:
2. 2. 5. 15000. [4, 2]. [6, 1]
hello
但是,第一次运行时,我得到:
2. 2. 5. 15000. [4, 2]. [6, 1]
然后第二次,我得到:
hello
2. 2. 5. 15000. [4, 2]. [6, 1]
因此,两次击中服务器后的整个控制台如下所示:
2. 2. 5. 15000. [4, 2]. [6, 1]
hello
2. 2. 5. 15000. [4, 2]. [6, 1]
如果有人有任何想法,请先感谢您的帮助!
由于存在许多不一致之处,因此很难判断此代码段中发生了什么,但是在诸如read之类的Python命令中,recv被阻塞,直到(在您的情况下)读取1024个字节或关闭套接字为止。 阻塞很可能是导致您所看到的行为的原因。
我怀疑您不想在每次发送后关闭套接字。
在这种情况下,我建议您尝试以下操作:
在发送时冲洗套接字,以确保没有缓冲
fd.flush()
使用'readline'代替读取-如果数据流中有'换行' 或如果在发送中知道确切的数据大小,则这应该是非阻塞的,请使用小于1024的read / recv值...
data = fd.readline() data = sock.recvfrom(10)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.