2017-04-03 73 views
0

我正在創建我的python web服務器,它將當前目錄中的html文件稱爲「index」,讀取代碼並將其作爲響應發送,但是當我看到想顯示圖像,它沒有工作,有人可以幫我嗎?我的python web服務器不會渲染圖像

#server.py 
import socket 

port = 8080 

listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
listen_socket.bind(('', port)) 
listen_socket.listen(1) 
print 'Serving on port '+str(port) 
while True: 
    client_connection, client_address = listen_socket.accept() 
    request = client_connection.recv(1024) 
    print request 

    response = """\ 
HTTP/1.1 200 OK 
Content-type:text/html\r\n\r 
""" 
    f = open("index.html", 'r') 
    content = f.read() 

    client_connection.sendall(response+content) 
    client_connection.close() 

這裏是HTML代碼,我想顯示

<!--index.html--> 
<html> 
<body> 
<p>image:</p> 
<img src="img.jpg" /> 
</body> 
</html> 

這也將是可取的,如果有可能,而不直接從URL中獲得的圖像做。 預先感謝您。

+0

你可不可以使用像'httpserver'這樣的內置web環境,或者像'web.py'這樣的庫更加簡化和健壯? –

回答

0

圖像沒有得到渲染,因爲你沒有發送那個圖像,你只是發送html頁面。

您需要確定請求並根據該請求發送資源。 我試圖調整你的代碼。它正確顯示我的圖像。

# server.py 
import socket 

port = 8080 

listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
listen_socket.bind(('', port)) 
listen_socket.listen(1) 
print 'Serving on port ' + str(port) 
while True: 
    client_connection, client_address = listen_socket.accept() 
    request = client_connection.recv(1024) 
    print request 

    if request.split()[1] == '/': 
     headers = ("HTTP/1.1 200 OK\r\n" 
        "Content-Type: text/html\r\n" 
        "\r\n") 
     f = open("index.html", 'r') 
    elif request.split()[1] == '/img.jpg': 
     headers = ("HTTP/1.1 200 OK\r\n" 
        "Content-Type: image/jpeg\r\n" 
        "\r\n") 
     f = open("img.jpg", 'r') 

    content = f.read() 
    client_connection.sendall(headers + content) 
    client_connection.close() 

看看像Django,Flask等一些網絡框架,如果你想服務的不僅僅是一個頁面。

相關問題