如何通过java中的套接字发送html文件及其图像

时间:2016-05-05 14:50:31

标签: java html sockets

项目需要通过Java中的套接字发送html文件。我设法让文本显示在浏览器中,但没有任何图片加载。我在网上找到这个代码,帮我发送html文件,但我想知道是否有任何方式发送图片。我将所有图像都放在img文件夹中,这是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();
            }
        }
    }

3 个答案:

答案 0 :(得分:1)

您确定您的项目还不需要您解析HTML并单独请求图像吗?这听起来像是在模拟Web服务器之类的东西。一般来说,浏览器会下载页面的HTML,解析它,然后向页面中包含的每个图像或其他资源(CSS,场外Javascript等)发送后续请求到服务器。

每个资源执行一个请求也可以简化您的服务器,因为它只需处理当时请求的资源,这会将一些逻辑和复杂功能推回到客户端,以便能够知道要询问哪些资源对

HTTP 2中的情况有所改变,但这可能是你问题范围之外的另一个问题。

答案 1 :(得分:0)

通常,图像文件不包含在html下载中,但随后会在解析html文件时请求。通过更正标签中的src位置,可能可以解决为什么图像未在您的情况下显示的问题。如果您确实需要一起下载所有内容,我建议您发送.zip存档

答案 2 :(得分:0)

我认为您正在尝试在网络浏览器中实现“另存为”功能。

您需要单独保存html文件以及图像文件,嵌入内容等资源。

由于你已经有了img文件夹中的图像,你需要改变html中图像标签的src属性 - 从图像文件夹中选择图像。