Windows上的python select.select()
我正在使用
here中的代码测试UDP打孔.它可以在Linux上运行,但在Windows上报告错误.这是发生错误的代码片段:
while True: rfds,_,_ = select([0,sockfd],[],[]) # sockfd is a socket if 0 in rfds: data = sys.stdin.readline() if not data: break sockfd.sendto(data,target) elif sockfd in rfds: data,addr = sockfd.recvfrom(1024) sys.stdout.write(data) 和错误消息: Traceback (most recent call last): File "udp_punch_client.py",line 64,in <module> main() File "udp_punch_client.py",line 50,in main rfds,[]) select.error: (10038,'') 我知道这个错误与Windows上的select实现有一些关系,每个人都引用这个:
所以我有两个问题: > [0,sockfd]中的0是什么意思?这是一种经常使用的技术吗? 谢谢. 解决方法
不幸的是,select不会帮助你在一个线程中处理stdin和网络事件,因为select不能用于Windows上的流.你需要的是一种无阻塞地读取stdin的方法.你可以使用:
> stdin的额外线程.这应该工作正常,是最简单的工作方式.如果您需要的只是等待I / O事件,Python线程支持是完全可以的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |