Http服务器输出错误

时间:2016-06-13 08:27:43

标签: java fileoutputstream httpserver

我已经为基本的http服务器编写了代码。当客户端连接到服务器时,他会收到一个文件作为响应。 当只发送一个文件时它工作正常,但是当oi尝试引入一个循环以便多次发送同一个文件时,我收到此错误: sun.net.httpserver.StreamClosedException

这是我的代码:

public class SimpleServer {
  public static void main(String[] args) throws Exception {
      HttpServer server = HttpServer.create(new InetSocketAddress(8080), 0);
      server.createContext("/getFile", new FileHendler());
      server.setExecutor(null);
      server.start();
  }

  static class FileHendler implements HttpHandler {
      public void handle(HttpExchange t){
      Headers h = t.getResponseHeaders();
      h.add("Content-Type", "file");

      // a file
      LocalDateTime ldt = LocalDateTime.now();
      double t = (ldt.getHour()-3)*3600 + ldt.getMinute()*60 + ldt.getSecond();
      File folder = new File ("D:\\outFiles");
      File[] CorFiles = folder.listFiles();
      double tdif = 100000;
      int fileIndx = 0;
      for (int i = 0; i < CorFiles.length; i++){
          String[] tmp = CorFiles[i].getName().toString().split("_");
          String Zc = tmp[2].substring(0, tmp[2].length()-4);
          if (Math.abs(Double.parseDouble(Zc) - t) < tdif) {
              fileIndx = i;
              tdif = Math.abs(Double.parseDouble(Zc) - t);
          }
      }
      byte[] bytes  = new byte [(int)CorFiles[fileIndx].length()];

      try {
        FileInputStream fis = new FileInputStream(CorFiles[fileIndx]);
        fis.read(bytes);
        // ready to send the response.
        t.sendResponseHeaders(200, CorFiles[fileIndx].length());
        OutputStream os = t.getResponseBody();
        for (int i = 0; i < 10; i++){
            os.write(bytes);
        }
        os.close();    
      } catch (FileNotFoundException ex) {System.out.println(ex);} 
        catch (IOException ex) {System.out.println(ex);}  
  }}}

我做错了什么,我该如何解决? 这个for循环仅用于示例,最终我想做同样的事情,但使用不同的循环并在每个指定的时间间隔发送不同的文件。 任何帮助,将不胜感激。谢谢

0 个答案:

没有答案