2012-04-12 40 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新線的混合物,換行符是自然在您的源代碼中。

此代碼適用於我的網絡瀏覽器。

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。

相關問題