简单Python Echo服务器-参数错误
无论何时运行此代码,我都会收到while循环参数的以下错误消息:简单Python Echo服务器-参数错误,python,networking,Python,Networking,无论何时运行此代码,我都会收到while循环参数的以下错误消息: 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(5) input = [server,sys.stdin] ru
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(5)
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()
如何修复此问题以使服务器正常运行?抱歉,如果这是一个糟糕的问题,我是python新手,无法理解这一点。谢谢。是的,找到了解决您问题的方法。他们的问题似乎是
sys.stdin
,python空闲GUI出于某种原因不允许您在代码中使用sys.stdin.fileno()
,而如果您在命令提示符或终端中运行它,它在linux上会正常工作
如果您使用windows,则无法将sys.stdin
作为参数传递给select()函数,因为在windows中它只接受套接字作为参数。如文件中所述
注意:Windows上的文件对象是不可接受的,但套接字是可接受的。在Windows上,基础select()函数由WinSock库提供,不处理非源于WinSock的文件描述符
因此,为了缓解此问题,使其在windows和linux上都能工作:
inputready,outputready,exceptready = select.select(input,[],[])
TypeError: argument must be an int, or have a fileno() method.
请缩进代码。
input=[server,sys.stdin]
这一行的意思是什么?您使用的是什么操作系统?您是使用空闲的Python GUI还是通过终端运行它。
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)
input1 = [server]
running = 1
while running:
inputready,outputready,exceptready = select.select(input1,[],[])
for s in inputready:
if s == server:
# handle the server socket
client, address = server.accept()
input1.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()
input1.remove(s)
server.close()