我试图在
Windows下运行以下python服务器:
""" An echo server that uses select to handle multiple clients at a time. Entering any line of input at the terminal will exit the server. """ import select import socket import sys host = '' port = 50000 backlog = 5 size = 1024 server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) server.bind((host,port)) server.listen(backlog) input = [server,sys.stdin] running = 1 while running: inputready,outputready,exceptready = select.select(input,[],[]) for s in inputready: if s == server: # handle the server socket client,address = server.accept() input.append(client) elif s == sys.stdin: # handle standard input junk = sys.stdin.readline() running = 0 else: # handle all other sockets data = s.recv(size) if data: s.send(data) else: s.close() input.remove(s) server.close()
我收到错误消息(10038,’尝试对非套接字的操作’).这可能与python文档中的the remark有关,“Windows上的文件对象是不可接受的,但套接字是.在Windows上,底层的select()函数由WinSock库提供,并且不处理不具有的文件描述符来自WinSock.“在互联网上有很多关于这个主题的帖子,但它们对我来说太技术或者根本不清楚.所以我的问题是:有没有什么方法可以在Windows下使用python中的select()语句?请添加一些示例或修改上面的代码.谢谢!
看起来它不喜欢sys.stdin
原文链接:https://www.f2er.com/windows/365340.html如果您将输入更改为此
input = [server]
例外情况将会消失.
这是从the doc
Note: File objects on Windows are not acceptable,but sockets are. On Windows,the underlying select() function is provided by the WinSock library,and does not handle file descriptors that don’t originate from WinSock.