我在另一篇不错的文章中找到了以下代码:

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循环,并让它偶尔检查是否已接收到数据,但我不知道该怎么做。

最佳答案

在select语句中使用timeout参数。如果没有可用数据(由空列表指示),则可以执行while循环主体中需要进行的其他任何处理。

关于python - 使用Select的Python套接字检查数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32753709/

10-12 18:02
查看更多