2011-02-23 17 views
18

Me encontré con un servidor web incrustado llamado mangosta y http://code.google.com/p/mongoose/ y leí el wiki que fue genial y busqué un ejemplo de programa hello world pero no pude encontrarlo ... encontré un ejemplo pero eso fue escrito en C++ para windows y puede cualquiera proporcionar un programa de ejemplo c para ejecutar este servidor web ..mongoose web server helloworld program

+0

¿Has mirado en los ejemplos (http: // código. google.com/p/mongoose/source/browse/#hg%2Fexamples) directorio? Hay un ejemplo de chat que muestra una forma de insertar mangosta y construir sobre ella. –

Respuesta

23

Es muy sencillo, primero es necesario implementar la llamada función de devolución:

void *event_handler(enum mg_event event, 
    struct mg_connection *conn) { 

    const struct mg_request_info *request_info = mg_get_request_info(conn); 

    static void* done = "done"; 

    if (event == MG_NEW_REQUEST) { 
     if (strcmp(request_info->uri, "/hello") == 0) { 
      // handle c[renderer] request 
      if(strcmp(request_info->request_method, "GET") != 0) { 
       // send error (we only care about HTTP GET) 
       mg_printf(conn, "HTTP/1.1 %d Error (%s)\r\n\r\n%s", 
        500, 
        "we only care about HTTP GET", 
        "we only care about HTTP GET"); 
       // return not null means we handled the request 
       return done; 
      } 

      // handle your GET request to /hello 
      char* content = "Hello World!"; 
      char* mimeType = "text/plain"; 
      int contentLength = strlen(content); 

      mg_printf(conn, 
       "HTTP/1.1 200 OK\r\n" 
       "Cache: no-cache\r\n" 
       "Content-Type: %s\r\n" 
       "Content-Length: %d\r\n" 
       "\r\n", 
       mimeType, 
       contentLength); 
      mg_write(conn, content, contentLength); 
      return done; 
      } 
     } 
     // in this example i only handle /hello 
     mg_printf(conn, "HTTP/1.1 %d Error (%s)\r\n\r\n%s", 
      500, /* This the error code you want to send back*/ 
      "Invalid Request.", 
      "Invalid Request."); 
     return done; 
    } 

    // No suitable handler found, mark as not processed. Mongoose will 
    // try to serve the request. 
    return NULL; 
} 

Entonces necesita iniciar el servidor:

int main(int argc, char **argv) { 

    /* Default options for the HTTP server */ 
    const char *options[] = { 
     "listening_ports", "8081", 
     "num_threads", "10", 
     NULL 
    }; 

    /* Initialize HTTP layer */ 
    static struct mg_context *ctx; 

    ctx = mg_start(&event_handler, options); 
    if(ctx == NULL) { 
     exit(EXIT_FAILURE); 
    } 

    puts("Server running, press enter to exit\n"); 
    getchar(); 
    mg_stop(ctx); 

    return EXIT_SUCCESS; 
} 
0

aplicación de compilación: $ CC my_app.c mongoose.c

#include "mongoose.h" // Include Mongoose API definitions 


static const char *s_http_port = "8089"; 


// Define an event handler function 
static void ev_handler(struct mg_connection *nc, int ev, void *ev_data) 
{ 
    struct mbuf *io = &nc->recv_mbuf; 

    switch (ev) 
    { 
    case MG_EV_RECV: 

     // This event handler implements simple TCP echo server 
     mg_send(nc, io->buf, io->len); // Echo received data back 

     mbuf_remove(io, io->len);  // Discard data from recv buffer 

     break; 

    default: 
     break; 
    } 
} 



int main(void) 
{ 
    struct mg_mgr mgr; 

    mg_mgr_init(&mgr, NULL); // Initialize event manager object 

    // Note that many connections can be added to a single event manager 
    // Connections can be created at any point, e.g. in event handler function 
    mg_bind(&mgr, s_http_port, ev_handler); // Create listening connection and add it to the event manager 

    for (;;) 
    { 
     // Start infinite event loop 
     mg_mgr_poll(&mgr, 1000); 
    } 

    mg_mgr_free(&mgr); 
    return 0; 
}