2016-05-05 41 views
1

我需要項目通過Java中的套接字發送html文件。我設法讓文本出現在瀏覽器中,但沒有任何圖片加載。我發現這個代碼在線幫助我發送HTML文件,但我想知道是否有任何方式發送圖片。我有一個img文件夾中的所有圖像,這是html文件所在的位置。如何通過java中的套接字發送html文件及其圖像

public class SimpleFileServer { 

    public final static int SOCKET_PORT = 9000; // you may change this 
    public final static String FILE_TO_SEND = "D:\\Project 2\\index.html"; // you may change this 

    public static void main (String [] args) throws IOException { 
    FileInputStream fis = null; 
    BufferedInputStream bis = null; 
    OutputStream os = null; 
    ServerSocket servsock = null; 
    Socket sock = null; 
    try { 
     servsock = new ServerSocket(SOCKET_PORT); 
     while (true) { 
      try { 
       sock = servsock.accept(); 

       // send file 
       File myFile = new File (FILE_TO_SEND); 
       byte [] mybytearray = new byte [(int)myFile.length()]; 
       fis = new FileInputStream(myFile); 
       bis = new BufferedInputStream(fis); 
       bis.read(mybytearray,0,mybytearray.length); 
       os = sock.getOutputStream(); 
       os.write(mybytearray,0,mybytearray.length); 
       System.out.println("Done."); 
      } finally { 
       if (bis != null) bis.close(); 
       if (os != null) os.close(); 
       if (sock!=null) sock.close(); 
      } 
     } 
      } finally { 
       if (servsock != null) servsock.close(); 
      } 
     } 
    } 
+0

html將到達瀏覽器,這將看到一個和瀏覽器將稍後在單獨的套接字上發出該URL的GET請求 – Exceptyon

回答

1

您確定您的項目不需要您解析HTML並單獨請求圖像嗎?這聽起來像你正在模擬一個像Web服務器的東西。一般來說,瀏覽器將下載頁面的HTML,解析它,然後向頁面中包含的每個圖像或其他資源(CSS,離站Javascript等)發送後續請求到服務器。

對每個資源做一個請求也可以簡化你的服務器,因爲它只需要處理當時被請求的資源,這就將一些邏輯和複雜性推回客戶端,以便能夠知道哪些資源要求。

事情在HTTP 2中有所變化,但這是另一個可能超出您的問題範圍的問題。

0

通常情況下,圖片文件不包含在html下載中,但隨後會在解析html文件時被請求。在你的情況下爲什麼沒有顯示圖像的問題可能通過糾正標籤中的src位置來解決。如果你確實需要一起下載,我建議發送一個.zip壓縮文件

0

我認爲你正試圖在web瀏覽器中實現「另存爲」功能。

您需要單獨保存html文件以及圖像文件,嵌入內容等資源。

由於您已經擁有img文件夾中的圖像,因此您需要更改html中圖像標記的src屬性 - 從圖像文件夾中選取圖像。