Ruby Socket TCPServer 向客戶端發送 png 圖像

馬蒂亞斯·李

我有一個使用套接字獲取所有客戶端數據並發回數據的 http 服務器。我能夠成功地將 HTML 發送回客戶端(我的 Web 瀏覽器),但是每當我嘗試發送圖像時,無論我發送什麼圖像,我都會得到一個小的白色方塊。

編碼:

#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"))

我可能讀錯了圖像,但我不確定。此外,即使使用正確的標頭,發送回其他二進制數據(例如可執行文件)也無法正常工作。

還有更多我沒有展示的代碼,因為它接受客戶端、解析請求等過多且無關緊要。

亞光

\r\n標題和數據之間有額外的內容。在每個標題之後添加一個\n(應該真的是 a \r\n),然後在打印它們時添加另一個(client.print "#{headers_s}\r\n"),然後最後寫出另一個。這額外的兩個字節導致瀏覽器看到無效的 PNG 數據。

刪除該行client.print "\r\n"應該可以解決您的問題。

(您可能還應該發送一個 Content-Length 標頭,儘管沒有它仍然可以工作。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Gatsby-plugin-image:更新 Gatsby 客戶端后缺少圖像道具

帶有創建日期的水印 png 圖像

OpenLayers - 使用自定義名稱將地圖另存為 png 圖像

服務器何時向客戶端發送 CSRF 令牌?

Node Websocket:向客戶端發送大型數組數據的最佳方式

Python Socket 客戶端 SSL 連接

將圖片框的圖像從用戶控件更改為帶有圖像鏈接的表單

wxPython - 將透明的 PNG 圖像放在另一個之上

創建背景由兩種顏色的正方形組成的 PNG 圖像

捕獲 png/jpg 圖像中 html div 的內容

UDP 客戶端池發送但不接收

Django 未在開發中渲染圖像

如何將多個圖像發送到cloudinary?

支付成功後如何使用Stripe payment_intent_data向客戶端發送郵件?

郵遞員以 json 和圖像的形式發送數據

從服務器發送圖像以在 EJS 文件中使用

Django 後端提供反應前端圖像

Vb.net基于任务的多客户端tcpserver

未找到設置為參數“圖像”的文件“assets/background.png”。pub 完成退出代碼 1

TCPServer与HTTPServer

當 accessToken 已過期且客戶端需要發送刷新令牌時,應將哪個狀態碼發送給客戶端

如何更改 URL 中的圖像並仍然確保發送的舊電子郵件不受影響?

Google Cloud socket.io 服務器,客戶端未保持持久連接

接收錯誤:xhr 輪詢錯誤 socket.io 客戶端反應

在頁面視圖中找不到 Django 圖像,但在發布請求後保存

RDCOM 客戶端錯誤:無法發送電子郵件

如何使用python http服務器/客戶端發送字典

當用戶單擊任何圖像時,只會彈出具有新寬度和高度屬性的圖像

從用戶到網站顯示輸入圖像