2012-04-12 5 views
1

PythonソケットのWebサーバーコードが失敗します。なぜですか?私は、これは私の現在のコードではPythonと非常に基本的なWebサーバーのようなアプリケーションを実装しようとしています

from socket import * 

serverPort = 12000 
serverSocket = socket(AF_INET,SOCK_STREAM) 
serverSocket.bind(('', serverPort)) 
serverSocket.listen(1) 
print 'Server is now running...' 
while 1: 
    connectionSocket, addr = serverSocket.accept() 
    connectionSocket.sendall(''' 
     HTTP/1.0 200 OK\r\n 
     Content-Type:text/html\r\n 
     Connection:close\r\n 
     \r\n 
     <!DOCTYPE html> 
     <head><title>Lab sign-up - AntonX Server</title></head> 
     <h1>Lab Sign-up</h1> 
     <table> 
     <form action=\"localhost:12000\" method=\"GET\"> 
     <tr><td>Time</td><td>Name</td></tr> 
     <tr><td>1 PM</td><td><input type=\"text\" name=\"time_1\"></td></tr> 
     <tr><td>2 PM</td><td><input type=\"text\" name=\"time_2\"></td></tr> 
     <tr><td>3 PM</td><td><input type=\"text\" name=\"time_3\"></td></tr> 
     <tr><td>4 PM</td><td><input type=\"text\" name=\"time_4\"></td></tr> 
     <tr><td>5 PM</td><td><input type=\"text\" name=\"time_5\"></td></tr> 
     <tr><td colspan=\"2\"><input type=\"submit\" name=\"submit\" value=\"Steal this spot!\"></tr> 
     </form></table> 
     </html>\r\n 
    ''') 
    connectionSocket.close() 

問題がある...私はローカルホストに移動する場合:12000、私はエラー101を取得します:接続がリセットされました。何故ですか?

答えて

2

返信するデータには、余分なスペースと改行文字があります。例えば 、

''' 
    HTTP/1.0 200 OK\r\n 
    Content-Type:text/html\r\n''' 

は当然ですつまり
(blank line) 
(extra spaces) HTTP/1.0 200 OK 
(blank line) 
(extra spaces) Content-Type:text/html 

は、あなたが明示的の\ r \ nに含まれている新しい行の混合物を得ている文字列、および改行を送信しますあなたのソースコードで。

このコードは、Webブラウザで機能します。

from socket import * 

serverPort = 12000 
serverSocket = socket(AF_INET,SOCK_STREAM) 
serverSocket.bind(('', serverPort)) 
serverSocket.listen(1) 
print 'Server is now running...' 
while 1: 
    connectionSocket, addr = serverSocket.accept() 
    connectionSocket.sendall("HTTP/1.0 200 OK\r\n"+ 
          "Content-Type: text/html\r\n"+ 
          "Connection: close\r\n"+ 
          "\r\n"+ 
     """<!DOCTYPE html> 
     <head><title>Lab sign-up - AntonX Server</title></head> 
     <h1>Lab Sign-up</h1> 
     <table> 
     <form action=\"localhost:12000\" method=\"GET\"> 
     <tr><td>Time</td><td>Name</td></tr> 
     <tr><td>1 PM</td><td><input type=\"text\" name=\"time_1\"></td></tr> 
     <tr><td>2 PM</td><td><input type=\"text\" name=\"time_2\"></td></tr> 
     <tr><td>3 PM</td><td><input type=\"text\" name=\"time_3\"></td></tr> 
     <tr><td>4 PM</td><td><input type=\"text\" name=\"time_4\"></td></tr> 
     <tr><td>5 PM</td><td><input type=\"text\" name=\"time_5\"></td></tr> 
     <tr><td colspan=\"2\"><input type=\"submit\" name=\"submit\" value=\"Steal this spot!\"></tr> 
     </form></table> 
     </html>\r\n 
    """) 
    connectionSocket.close() 

(ただし、これはPythonでWebサーバを書くのは非常に良い方法ではありません!)

あなたはおそらく、この種のコードを支援するためのPythonの関数に様々な特注のを見てしたいと思うかもしれSimpleHTTPServerから始まります。

0

"Content-Type"フィールドとHTML5 Doctypeの両方を指定することはできません。

関連する問題