Tôi đã viết một máy chủ http đơn giản để xử lý yêu cầu POST:HTTP máy chủ bị treo trong khi chấp nhận các gói tin
class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler):
def do_POST(self):
ctype, pdict = cgi.parse_header(self.headers.getheader('content-type'))
postvars = {}
try:
if ctype == 'application/x-www-form-urlencoded':
length = int(self.headers.getheader('content-length'))
postvars = cgi.parse_qs(self.rfile.read(length), keep_blank_values=1)
self.send_response(200)
self.send_header("Content-type", "text")
self.send_header("Content-length", str(len(body)))
self.end_headers()
self.wfile.write(body)
except:
print "Error"
def httpd(handler_class=MyHandler, server_address = ('2.3.4.5', 80)):
try:
print "Server started"
srvr = BaseHTTPServer.HTTPServer(server_address, handler_class)
srvr.serve_forever() # serve_forever
except KeyboardInterrupt:
server.socket.close()
if __name__ == "__main__":
httpd()
Các máy chủ chạy tốt nhưng đôi khi nó chỉ bị treo. Khi tôi bấm CTRL +C nó mang lại cho các lỗi sau và sau đó tiếp tục dữ liệu nhận:
Exception happened during processing of request from ('1.1.1.2', 50928)
Traceback (most recent call last):
File "/usr/lib/python2.6/SocketServer.py", line 281, in _handle_request_noblock
self.process_request(request, client_address)
File "/usr/lib/python2.6/SocketServer.py", line 307, in process_request
self.finish_request(request, client_address)
File "/usr/lib/python2.6/SocketServer.py", line 320, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "/usr/lib/python2.6/SocketServer.py", line 615, in __init__
self.handle()
File "/usr/lib/python2.6/BaseHTTPServer.py", line 329, in handle
self.handle_one_request()
File "/usr/lib/python2.6/BaseHTTPServer.py", line 312, in handle_one_request
self.raw_requestline = self.rfile.readline()
File "/usr/lib/python2.6/socket.py", line 406, in readline
data = self._sock.recv(self._rbufsize)
KeyboardInterrupt
Ai đó có thể cho tôi biết làm thế nào để khắc phục điều này? Tôi không thể hiểu được lỗi.
Đó thực sự là mã bạn đang chạy? Điều đó lúng túng 'ngoại trừ:' trông giống như một lỗi cú pháp. – alberge
Tôi đã bỏ lỡ câu lệnh trong khi sao chép. Xin lỗi vì điều đó. – Bruce
Bạn có chắc chắn rằng khách hàng không gây ra sự cố (ví dụ: bằng cách kết nối và gửi không có gì hoặc không giới hạn số lượng dữ liệu)? – katzenversteher