我是一名新手Python程序员,正在尝试创建服务器和客户端。 我仍然希望能够从键盘输入一些内容,以便在服务器上键入“exit”来关闭服务器。我从各个站点获取示例代码以进行套接字编程并得到以下代码。
但是,每当我运行代码时,都会收到以下错误消息:
我看到有人提到,在Windows中要解决这个问题,需要删除sys.stdin,因为Windows只接受sockets。我正在尝试在Linux中编写此代码。我已经尝试了各种方法来让它工作,但我已经用尽了所有资源和想法。以下是服务器端的代码:
任何帮助或想法都将不胜感激。谢谢!
但是,每当我运行代码时,都会收到以下错误消息:
The host name of this machine is 127.0.0.1
The IP address of the host is 127.0.0.1
Server now awaiting client connection on port 2836
im right before the select
Traceback (most recent call last):
File "/root/Server_2.py", line 42, in <module>
inputready, outputready, exceptready = select.select(input, [], [])
TypeError: argument must be an int, or have a fileno() method.
>>>
我看到有人提到,在Windows中要解决这个问题,需要删除sys.stdin,因为Windows只接受sockets。我正在尝试在Linux中编写此代码。我已经尝试了各种方法来让它工作,但我已经用尽了所有资源和想法。以下是服务器端的代码:
import socket #import socket module
import select
import sys
host = "127.0.0.1"
print ("The host name of this machine is " + host)
hostIP = socket.gethostbyname(host) # get host IP address
print ("The IP address of the host is %s" % (hostIP))
port = 2836 # Reserve the port for the server
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((hostIP, port)) # This server to a port
s.listen(4) # Now wait for client connection
print("Server now awaiting client connection on port %s" % (port))
#WINDOWS ONLY ACCEPTS SOCKETS FOR SELECT(), no standard in
input = [s, sys.stdin]
running = 1
while running:
print("im right before the select")
# when there's something in input, then we move forward
# ignore what's in output and except because there's nothing
# when it comes to sockets
inputready, outputready, exceptready = select.select(input, [], [])
print("i'm here na")
# check who made a response
for x in inputready:
if x == s:
print(s)
#handle the server socket
client, address = s.accept()
print("connection comming in")
input.append(client)
elif x == sys.stdin:
# handle standard input
stuff = sys.stdin.readline()
if stuff == "exit":
running = 0
else:
print("you typed %s" % (stuff))
else:
#handle all other sockets
data = x.recv(1024)
print("i received " + data)
if data:
if data == "exit":
x.close()
input.remove(x)
running = 0
else:
x.send(data)
print("I am sending %s" % (data))
else:
x.close()
input.remove(x)
s.close()
任何帮助或想法都将不胜感激。谢谢!