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,尽管没有它仍然可以工作。)
我有一个使用套接字的 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,尽管没有它仍然可以工作。)