[英].recv function Socket programming TCP Server in Python
我在讓我非常基本和簡單的TCP Server正確處理http請求方面遇到麻煩。 這就是我到目前為止
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)
我知道返回值以字節為單位,但是當我嘗試使用函數將其轉換為類似decode()的字符串時,我也會遇到錯誤
我的.py文件和html文件位於本地計算機上的同一目錄中,而我測試此方法的方式是運行並打開瀏覽器並輸入
http://127.0.0.1:4567/helloworld.html
我的代碼在收到HTTP請求后立即崩潰。 任何和所有幫助將不勝感激!
您的代碼有很多問題,由於您沒有說明要關注的特定問題,因此,我看到的是:
connectionSocket.send(outputdata[i].encode())
connectionSocket.send("\r\n".encode())
在您發送回客戶端的每個字符之后,似乎都會發送換行符。
另外,它不會處理客戶端斷開連接的問題,因為您正在發送回無效數據。
即使您嘗試執行的操作中沒有這些錯誤,您似乎也沒有嘗試發送回有效的http響應。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.