我已经为基本的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
循环仅用于示例,最终我想做同样的事情,但使用不同的循环并在每个指定的时间间隔发送不同的文件。
任何帮助,将不胜感激。谢谢