0

代码:

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 连接已重置?不知道为什么!我究竟做错了什么

4

2 回答 2

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()
于 2012-04-12T05:27:31.153 回答
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()
于 2012-04-12T05:27:12.903 回答