![](/img/trans.png)
[英]Python client-server socket error [Errno 9] Bad file descriptor
[英]socket error [Errno 9] Bad file descriptor HTTP server
我想为多客户端套接字程序编写代码,但得到错误的文件描述符,并且我不知道如何解决它。 这是我的第一个python代码,我是python的新手。
我的代码:
import socket
import os.path
from thread import *
host = '0.0.0.0'
port = 11111
#server_socket = socket.socket()
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind((host, port))
server_socket.listen(1)
def clientthread(client_socket):
while True:
rqst = client_socket.recv(1024)
if ("GET" not in rqst) or (rqst == ""):
client_socket.send("HTTP/1.1 500 Internal Server Error\r\n")
FileName = rqst.split(" ")[1]
print "Client (%s, %s) connected" % client_address
print rqst
if os.path.isfile(os.getcwd() + FileName) == True:
f = open(os.getcwd() + FileName )
g = f.read()
response = 'HTTP/1.1 200 OK\r\n' + 'Content-Length: ' + str(len(g)) + '\r\n''' + g
client_socket.send(response)
print response
elif FileName == "/":
f = open(os.getcwd() + "/index.html")
g = f.read()
response = 'HTTP/1.1 200 OK\r\n' + 'Content-Length: ' + str(len(g)) + '\r\n''' + g
client_socket.send(response)
print response
elif FileName == "/for.html":
client_socket.send("HTTP/1.1 403 Forbidden\r\n\r\n")
print "HTTP/1.1 403 Forbidden\r\n\r\n"
elif FileName == "/move.html":
f = open(os.getcwd() + "/index2.html")
g = f.read()
client_socket.send(g)
client_socket.send('HTTP/1.1 302 Moved Temporarily\r\n')
print 'moved''http/1.1 302 Moved Temporarily\r\n'
elif "calculate-next?num=" in FileName:
num = int(FileName[FileName.find("=")+1:])+1
client_socket.send(str(num))
print str(num)
elif "calculate-area?" in FileName:
height = float(FileName[FileName.find("height")+7:FileName.find("&")])
width = float(FileName[FileName.find("width")+6:])
S = float((height*width)/2)
client_socket.send(str(S))
print str(S)
else:
response = "HTTP/1.1 404 Not Found\r\n"
client_socket.send(response)
print response
client_socket.close()
client_socket.close()
server_socket.close()
while True:
(client_socket, client_address) = server_socket.accept()
start_new_thread(clientthread ,(client_socket,))
我的错误:
由Traceback(最近一次调用最近)启动的线程中未处理的异常:文件“ C:\\ Users \\ Eden \\ Desktop \\ HTTPserver \\ server2.py”,第15行,在客户端线程rqst = client_socket.recv(1024)中,文件“ C:\\ _dummy中的Python27 \\ lib \\ socket.py“行174引发错误(EBADF,“错误的文件描述符”)socket.error:[Errno 9]错误的文件描述符
我该怎么办?
您的内部while循环中有一条重复的client_socket.close()
行缩进。 这意味着您尝试从关闭的套接字中接收数据,这会引发该错误。 另外,为什么要在clientthread
方法中关闭server_socket
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.