我的 python 网络服务器无法呈现图像

my python web server won't render images

我正在创建我的 python 网络服务器,它将获取当前目录中名为 "index" 的 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

    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 获取图像就更好了。 提前谢谢你。

图像没有得到渲染,因为您没有发送图像,您只是在发送 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()

如果您想要提供的不仅仅是一个页面,请查看一些 Web 框架,例如 Django、Flask 等。