2016-10-18 62 views
0

我很難讓我的基本和簡單的TCP服務器正常地處理http請求。這是我到目前爲止.recv函數Socket編程Python中的TCP服務器

from socket import * 
import sys 
serverSocket = socket(AF_INET, SOCK_STREAM) 


serverSocket.bind(('', 4567)) 
serverSocket.listen(1) 

while True: 
    print('Ready to serve...') 
    connectionSocket, addr = serverSocket.accept() 
    print("connected from: ", addr) 
    try: 
     message = connectionSocket.recv(1024) 
     filename = message.split()[1]     
     f = open(filename[1:])   
     outputdata = f.read() 
     connectionSocket.send("HTTP/1.1 200 OK\r\n") 
     for i in range(0, len(outputdata)):   
      connectionSocket.send(outputdata[i].encode()) 
      connectionSocket.send("\r\n".encode()) 
     connectionSocket.close() 
    except IOError: 
     connectionSocket.send("file not found") 
     serverSocket.close() 
sys.exit() 

錯誤來自open語句。我沒有完全理解這行代碼的返回值是如何組織的。

message = connectionSocket.recv(1024) 

我知道返回值是字節,但是當我嘗試使用機能的研究把它變成像解碼一個字符串()我得到的錯誤以及

我有.py文件和html文件坐在同一個目錄下我的本地機器上的方式和我測試這是我剛跑這和

http://127.0.0.1:4567/helloworld.html 

打開一個瀏覽器,輸入我的代碼,然後及時接收到HTTP請求後崩潰。 任何和所有的幫助將不勝感激!

+0

「我也有錯誤」什麼錯誤? 「我的代碼在收到HTTP請求後立即崩潰。」你有任何跡象表明它爲什麼崩潰? – xaxxon

回答

0

有很多問題,你的代碼,因爲你沒有說明你是什麼具體問題擔心,這裏是我所看到的:

 connectionSocket.send(outputdata[i].encode()) 
     connectionSocket.send("\r\n".encode()) 

這似乎是你發送的每一個字符後發送一個換行符回到客戶端。

另外,它不處理客戶端斷開連接,因爲您發送無效數據。

即使您嘗試執行的操作沒有這些錯誤,您似乎也不會嘗試發回有效的http響應。

https://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html