Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Работа с сетью > HTTPSERVER


Автор: Tony 18.8.2006, 10:37
Когда то давно писал 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 не всегда.Как избавиться от этого? smile 

Автор: Tony 7.9.2006, 08:39
Хей-хей-хей!!!!! ВОпрос в правелной переда4и фаила клиенту.Т.к сервер быстро пререка4ивает фаил.Клиент ловит не доканца т.к сервер передал всё и соединение закривается.Решение проблемы sleep(100) ,не всегда спосает.ДАи ждать приходится. smile 

Автор: tux 7.9.2006, 09:14
Tony, а ты не пробовал посмотреть в код существующих веб-серверов на Java, как там реализовано? Вот здесь есть совсем маленькие, думаю не сложно разобраться - http://java-source.net/open-source/web-servers.

Автор: Tony 7.9.2006, 20:36
Да я пробивал Tomcat ,no ты понал 4ем это закон4илось.

Автор: Tony 7.9.2006, 20:52
Нашёл barehttp-1.0.0. Смотрю его.

Автор: Tony 7.9.2006, 22:33
написал.ОФФ.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)