我继续收到这个需要为序列的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套接字是非阻塞的
答案 0 :(得分:4)
select.select
将三个列表作为参数rlist
,wlist
和xlist
:
- rlist:等到准备好阅读
- wlist:等到准备好写作
- xlist:等待“异常情况”(请参阅手册页,了解系统认为的这种情况)
你没有传递列表而是单个套接字。
试试这个:
ready = select.select([s], [s], [s], 1)
返回值将再次是三个列表的元组,第一个包含准备好读取的包含套接字,第二个套接字准备好写入,第三个套接字处于“异常条件”。
另请注意,在while循环中,您永远不会更新ready
,因此您将始终使用相同的套接字列表。此外,你应该在某处break
,否则你最终会在无限循环中调用c.send
。