【发布时间】:2015-12-21 14:32:04
【问题描述】:
我在另一篇文章中发现了以下代码,效果很好:
UDP_IP = ''
UDP_PORT = 5008
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(('', UDP_PORT))
while 1:
socket_list = [sys.stdin, s]
# Get the list sockets which are readable
read_sockets, write_sockets, error_sockets = select.select(socket_list , [], [])
for sock in read_sockets:
#incoming message from remote server
if sock == s:
data = sock.recv(4096)
if not data :
print '\nDisconnected from server'
sys.exit()
else :
#print data
sys.stdout.write(data)
#user entered a message
else :
msg = sys.stdin.readline()
s.send(msg)
我遇到的问题是 for 循环,因为它只有在收到数据时才会运行。我真的很希望它使用一个while循环并让它偶尔检查是否已收到数据,但我不知道如何做到这一点。
【问题讨论】:
-
用您的支票替换
sys.stdout.write(data)。 -
我总是建议使用异步编程框架来支持低级套接字编程。
-
我尝试替换 sys.stdout.... 但它没有帮助。它仍然只在我发送数据时运行。知道我做错了什么吗?
-
感谢华作的帖子-我仍在努力弄清楚如何让您的建议发挥作用。