1

我不断收到需要序列的 1 - 3 个参数的错误

import socket               # Import socket module
import sys 
import select

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)        # Create a socket object
host = "127.0.0.1" # Get local machine name
port = 50001               # Reserve a port for your service.
s.bind((host, port))        # Bind to the port

a = []
b = []

s.listen(1)                 # Now wait for client connection.
c, addr = s.accept()     # Establish connection with client.

s.setblocking(0)

ready = select.select(s, s, s, 1)  # i believe the error lies in here 
while True:
   print "reached"
   if ready[0]:
      print "reached1"
      data = mysocket.recv(4096)
   print 'Got connection from', addr
   c.send('Thank you for connecting \r\n') #all strings have to end with /r/n!!!
   print "sent"
c.close()                # Close the connection

错误

Select.select 参数 1 - 3 必须是序列。

我是 python 新手,因此我不确定错误是什么。我在另一篇文章中搜索了选择代码,因为我希望我的 recv 套接字是非阻塞的

4

1 回答 1

4

select.select将三个列表作为参数rlistwlistxlist

  • rlist:等到准备好阅读
  • wlist:等到准备好写入
  • xlist:等待“异常情况”(请参阅​​手册页了解您的系统认为这种情况的原因)

您不是通过列表,而是通过单个套接字。

尝试这个:

ready = select.select([s], [s], [s], 1)

返回值将再次是三个列表的元组,第一个包含准备读取的套接字,第二个准备写入的套接字,第三个处于“异常情况”的套接字。

另请注意,在您的 while 循环中,您永远不会 update ready,因此您将始终使用相同的套接字列表。另外,你应该有一个break地方,否则你最终会c.send在一个无限循环中调用。

于 2013-10-13T16:19:50.973 回答