簡體   English   中英

通過Java中的套接字發送圖像(或二進制數據)

[英]Sending image (or binary data) over sockets in Java

我正在編寫一個HTTP服務器,以便從頭開始學習(嘗試更深入地學習HTTP),並且已經使該服務器向客戶端發送帶有HTML的HTTP響應,而沒有很多問題。

當我嘗試通過電線發送二進制數據(例如JPEG圖像)時,就會出現問題。 瀏覽器似乎無法正確解釋它。 為此,我已將響應的MIME類型設置為image/jpeg ,並且正確的Content-Length仍然無法正確傳輸數據。

對此有些困惑,想知道我對Java中如何讀取二進制數據的理解或方法是否不正確?

我正在執行的一般方法是將磁盤中的文件讀取到FileInputStream ,然后將數據讀取到1024字節緩沖區中。 當我讀取緩沖區時,我正在將緩沖的數據寫入DataOutputStream ,該輸出具有客戶端的套接字連接作為OutputStream 使用后,我將刷新並關閉數據。

我為HTTP響應生成主體的部分在這里:

        FileInputStream fis = new FileInputStream("www/server.jpg");
        byte[] buffer = new byte[1024];
        DataOutputStream dos = new DataOutputStream(this.clientSocket.getOutputStream());
        int read;
        while((read=fis.read(buffer)) >= 0) {
            dos.write(buffer, 0, read);
        }

        dos.flush();

        fis.close();
        dos.close();

我已經硬編碼了幾件事,但是我認為這通常可以解決我的問題。 因此,當我發出如下所示的HTTP請求時,收到以下響應:

在此處輸入圖片說明

在FireFox中,圖像嘗試渲染,但是我得到消息: 在此處輸入圖片說明

我要顯示的圖像是: 在此處輸入圖片說明

有人有想法么?

謝謝!

因此,@ rkosegi關於從curl下載文件的評論幫助我弄清了問題所在。 顯然我在構造響應主體時不正確。 發生的是在HTTP實體標頭之后的正文內容之前插入了新行。 在流送正文內容之前刪除了此多余的換行符之后,我能夠使瀏覽器正確解釋數據。

天哪!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM