IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Réaliser un mini serveur web


Sujet :

Langage Java

  1. #1
    Invité
    Invité(e)
    Par défaut Réaliser un mini serveur web
    Je me permets de reposter ce sujet, car je ne l'avais pas mis dans la bonne section à l'origine (Android). Ce n'est plus un problème spécifique Android comme je le croyais au début.

    Je veux réaliser un mini serveur web qui ne fournit qu'un seul fichier, quelle que soit la requête.
    J'ai à ma disposition tous les packages org.apache.http.*

    Voilà ce que j'ai pour le moment :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
            try
            {
                while (true)
                {
                    Socket socket = this.serverSocket.accept();
                    DefaultHttpServerConnection conn = new DefaultHttpServerConnection();
                    conn.bind(socket, new BasicHttpParams());
                    HttpResponse response = new BasicHttpResponse(new BasicStatusLine(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, null));
                    HttpEntity entity = new InputStreamEntity(this.application.getResources().openRawResource(R.raw.zip), 100000);
                    response.setEntity(entity);
                    conn.sendResponseEntity(response);
                    conn.flush();
                    conn.shutdown();
                }
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
            catch (HttpException e)
            {
                e.printStackTrace();
            }
    La méthode openRawResource() me retourne un InputStream, et c'est la seule manière dont je peux accéder à mon fichier.

    Les problèmes que j'ai actuellement :
    - Le serveur ne me répond que très aléatoirement
    - Quand il veut bien me répondre, il ne me retourne que 1ko du fichier, alors qu'il fait au moins 10ko

    Quelqu'un a une idée ?

    Merci !

  2. #2
    Invité
    Invité(e)
    Par défaut
    en fait j'ai adapté un exemple existant
    http://svn.apache.org/repos/asf/http...ttpServer.java

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
     
    package org.pierre.remotedroid.client.http;
     
    import java.io.IOException;
    import java.net.ServerSocket;
    import java.net.Socket;
     
    import org.apache.http.HttpException;
    import org.apache.http.HttpRequest;
    import org.apache.http.HttpResponse;
    import org.apache.http.entity.InputStreamEntity;
    import org.apache.http.impl.DefaultConnectionReuseStrategy;
    import org.apache.http.impl.DefaultHttpResponseFactory;
    import org.apache.http.impl.DefaultHttpServerConnection;
    import org.apache.http.params.BasicHttpParams;
    import org.apache.http.params.CoreConnectionPNames;
    import org.apache.http.params.CoreProtocolPNames;
    import org.apache.http.params.HttpParams;
    import org.apache.http.protocol.BasicHttpContext;
    import org.apache.http.protocol.BasicHttpProcessor;
    import org.apache.http.protocol.HttpContext;
    import org.apache.http.protocol.HttpRequestHandler;
    import org.apache.http.protocol.HttpRequestHandlerRegistry;
    import org.apache.http.protocol.HttpService;
    import org.apache.http.protocol.ResponseConnControl;
    import org.apache.http.protocol.ResponseContent;
    import org.apache.http.protocol.ResponseDate;
    import org.apache.http.protocol.ResponseServer;
    import org.pierre.remotedroid.client.R;
    import org.pierre.remotedroid.client.application.PRemoteDroidApp;
    import org.pierre.remotedroid.protocol.PRemoteDroidConnection;
     
    public class HttpServer implements Runnable, HttpRequestHandler
    {
        private PRemoteDroidApp application;
     
        private ServerSocket serverSocket;
        private HttpService httpService;
        private HttpParams httpParams;
     
        public HttpServer(PRemoteDroidApp application) throws IOException
        {
            this.application = application;
            this.serverSocket = new ServerSocket(PRemoteDroidConnection.DEFAULT_PORT);
     
            BasicHttpProcessor httpproc = new BasicHttpProcessor();
            httpproc.addInterceptor(new ResponseDate());
            httpproc.addInterceptor(new ResponseServer());
            httpproc.addInterceptor(new ResponseContent());
            httpproc.addInterceptor(new ResponseConnControl());
     
            HttpRequestHandlerRegistry reqistry = new HttpRequestHandlerRegistry();
            reqistry.register("*", this);
     
            this.httpParams = new BasicHttpParams();
            this.httpParams.setIntParameter(CoreConnectionPNames.SO_TIMEOUT, 5000);
            this.httpParams.setIntParameter(CoreConnectionPNames.SOCKET_BUFFER_SIZE, 8 * 1024);
            this.httpParams.setBooleanParameter(CoreConnectionPNames.STALE_CONNECTION_CHECK, false);
            this.httpParams.setBooleanParameter(CoreConnectionPNames.TCP_NODELAY, true);
            this.httpParams.setParameter(CoreProtocolPNames.ORIGIN_SERVER, "HttpComponents/1.1");
     
            this.httpService = new HttpService(httpproc, new DefaultConnectionReuseStrategy(), new DefaultHttpResponseFactory());
            this.httpService.setParams(this.httpParams);
            this.httpService.setHandlerResolver(reqistry);
     
            (new Thread(this)).start();
        }
     
        public void run()
        {
            try
            {
                while (true)
                {
                    Socket socket = this.serverSocket.accept();
                    DefaultHttpServerConnection conn = new DefaultHttpServerConnection();
                    conn.bind(socket, new BasicHttpParams());
                    this.httpService.handleRequest(conn, new BasicHttpContext());
                }
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
            catch (HttpException e)
            {
                e.printStackTrace();
            }
        }
     
        public int getPort()
        {
            return this.serverSocket.getLocalPort();
        }
     
        public void handle(HttpRequest request, HttpResponse response, HttpContext context) throws HttpException, IOException
        {
            response.setEntity(new InputStreamEntity(this.application.getResources().openRawResource(R.raw.zip), -1));
        }
    }
    ça marche presque, le fichier est bien transmit, mais il reste quelques détails

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. « Coder » transforme un Raspberry Pi en mini serveur Web
    Par Cedric Chevalier dans le forum Actualités
    Réponses: 8
    Dernier message: 17/09/2013, 22h24
  2. Addition dans mini serveur web électronique
    Par P.G dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 28/05/2013, 21h52
  3. Racine du mini serveur web intégré à Visual Studio
    Par Idrakis dans le forum Visual Studio
    Réponses: 0
    Dernier message: 05/03/2010, 02h03
  4. Réaliser un mini serveur web
    Par Invité dans le forum API standards et tierces
    Réponses: 10
    Dernier message: 02/11/2009, 17h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo