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 The connection was reset? が表示されます。理由がわからない!私は何を間違っていますか

4

2 に答える 2

2

いくつかのバグ、いくつかは他よりも深刻です... @IanWetherbee がすでに指摘したように、本文の前に空の行が必要です。\n だけでなく \r\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 に答える