Когда то давно писал http сервер.Но мучает одна проблема.
| Код | public void run(){ try{ sock.setTcpNoDelay(true); DataInput d=new DataInputStream(sock.getInputStream()); String method= d.readLine().trim(); //naprimer zapros: GET /index.html HTTP/1.1 System.out.println(method); String request; if (method.indexOf("GET /")==0){//proverjaem esli poslan get esli net to otklu4aem usera //esli pusto visilaem sartovuju stranicu if (method.equals("GET / HTTP/1.1")==false){ request=method.substring(5,method.length()-9); } else{ request=Config.getPage(); } File f=new File("crash/root/"+request); PrintWriter o=new PrintWriter (sock.getOutputStream(),true); if (f.exists()){ request=request.substring(request.length()-4,request.length());//izimem tip dannih String mime="text/html";//mime po umol4aniju ... выставление миме FileChannel in=new FileInputStream(f).getChannel();
o.println("HTTP/1.0 200 OK"); o.println("Content-Type: "+mime); o.println("Content-Length: "+f.length()); o.println(); o.flush(); WritableByteChannel out=Channels.newChannel(sock.getOutputStream()); in.transferTo(0,in.size(), out); out.close(); in.close(); sleep(700);
}else{ Error.error(sock,404,request+" not found ","not found"); sock.close(); }
|
Проблема в том что фаилы размером от 100kb до 2 MB могут браузером не восприниматься.Он их просто игнарирует.Например картинка может 4асти4но загрузиться(например половина изображения).Эту проблему частично решает sleep(700);, no не всегда.Как избавиться от этого? |