-1
我已經開始學習使用python進行網絡編程,並且我的服務器出現了一些問題。python socket服務器使用http協議傳輸空文件
我試圖建立一個簡單的,可以用一些圖像,js和css代表簡單的服務器,但我無法弄清楚我的文件傳輸代碼有什麼問題,所以在我谷歌它超過小時我放棄了。 我通過瀏覽器檢查,它發送的HTML很好,但在頁面的上部有JS代碼。當我試圖單獨請求圖像時,瀏覽器下載了「name_I_choose.jpg」文件,但它是0kb文件。
這裏是我的代碼:
import socket
import os
print "server on"
server_socket = socket.socket()
server_socket.bind(("127.0.0.1", 80))
server_socket.listen(10)
while True:
(client_socket, client_address) = server_socket.accept()
try:
data = client_socket.recv(1024)
# print data
except socket.error:
print "no more requests, bye"
break
if not data:
break
lines = data.split("\r\n")
print lines[0]
parts = lines[0].split(" ")
print "1: " + parts[0] + " 2: " + parts[1] + " 3: " + parts[2]
if parts[0] == "GET" and parts[2] == "HTTP/1.1":
print "good"
if parts[1] == "\\" or parts[1] == "/":
path = "path/to/root/index.html"
else:
path = "path/to/root" + parts[1].replace("\\", "/")
if os.path.isfile(path):
f = file(path, 'rb')
size = b = os.path.getsize(path)
print size
types = {"txt": "text/html; charset=utf-8", "html": "text/html; charset=utf-8", "jpg": "image/jpeg",
"js": "text/javascript; charset=utf-8", "css": "text/css"}
f_type = types.get(path.split(".")[1])
data = f.read(size)
print "sending data"
client_socket.send("HTTP/1.0 200 " + str(size) + "\r\n" + "Content-Type: " + f_type)
client_socket.send(data)
else:
print "file not found"
print path
client_socket.send("HTTP/1.0 404 -1\r\n")
else:
print "not GET HTML FORM"
break
print "done"
client_socket.close()
server_socket.close()
可能有很多問題,所以我會感激你的一切都會建議。謝謝:)
當你運行這段代碼時你可以包含一些輸出嗎?幫助。 –
你能更具體嗎?什麼樣的輸出? –
對不起 - 我的意思是從這個程序輸出。你運行這個程序作爲服務器,然後你試圖從中獲取文件,對吧?你從運行的服務器看到什麼輸出?我在你的代碼中看到打印語句 - 你能告訴我們輸出嗎?你如何從這個正在運行的服務器獲取數據? –