Ruby Socket TCPServer发送png图片给客户端

Ruby Socket TCPServer send png image to client

我有一个使用套接字的 HTTP 服务器获取所有客户端数据,并发回数据。我能够成功地将 HTML 发送回客户端(我的网络浏览器),但是每当我尝试发送图像时,无论我发送什么图像,我都会得到一个白色的小方块。

代码:

#Generate and send response
def response(client, response = 200, headers, data)
    client.print "HTTP/1.1 #{response.to_s}\r\n"
    headers_s = ""
    for h in headers do
        headers_s = headers_s + h + "\n"
    end
    client.print "#{headers_s}\r\n"
    client.print "\r\n"
    client.print data.to_s
end

response(client, 200, ["Content-Type: image/png"], File.read("./very_cool_picture.png"))

我可能看错了图片,但我不确定。此外,即使使用正确的 headers.

,发回其他二进制数据(例如可执行文件)也无法正常工作

还有更多代码我没有展示,因为接受客户端、解析请求等内容过多且无关紧要

您在 header 和数据之间有一个额外的 \r\n。在每个 header 之后添加一个 \n(实际上应该是一个 \r\n),然后当您打印它们时添加另一个(client.print "#{headers_s}\r\n"),最后您写出其他。这两个额外的字节导致浏览器看到无效的 PNG 数据。

删除行 client.print "\r\n" 应该可以解决您的问题。

(您可能还应该发送一个 Content-Length header,尽管没有它仍然可以工作。)