代码:
from socket import *
sP = 14000
servSock = socket(AF_INET,SOCK_STREAM)
servSock.bind(('',sP))
servSock.listen(1)
while 1:
connSock, addr = servSock.accept()
connSock.send('HTTP/1.0 200 OK\nContent-Type:text/html\nConnection:close\n<html>...</html>')
connSock.close()
当我进入浏览器并键入localhost:14000时,出现错误101- ERR_CONNECTION_RESET连接已重置?不知道为什么!我做错了什么
答案 0 :(得分:2)
有几个错误,有些比其他错误更严重......正如@IanWetherbee已经注意到的那样,你需要在身体前面留空线。你也应该发送\ r \ n而不仅仅是\ n。您应该使用sendall
来避免短发。最后,您需要在完成发送后关闭连接。
以上是上述版本的略微修改版本:
from socket import *
sP = 14000
servSock = socket(AF_INET,SOCK_STREAM)
servSock.bind(('',sP))
servSock.listen(1)
while 1:
connSock, addr = servSock.accept()
connSock.sendall('HTTP/1.0 200 OK\r\nContent-Type:text/html\r\nConnection:close\r\n\r\n<html><head>foo</head></html>\r\n')
connSock.close()
答案 1 :(得分:0)
运行你的代码,我有类似的错误,也不确定它们的起源。但是,您是否考虑过内置的HTTP服务器,而不是滚动自己的HTTP服务器?看看下面的示例。这也可以支持POST(必须添加do_POST方法)。
简单HTTP服务器
from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
class customHTTPServer(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
self.wfile.write('<HTML><body>Hello World!</body></HTML>')
return
def main():
try:
server = HTTPServer(('',14000),customHTTPServer)
print 'server started at port 14000'
server.serve_forever()
except KeyboardInterrupt:
server.socket.close()
if __name__=='__main__':
main()