简体   繁体   中英

mongoose embedded webserver - not working from other system on same network

https://github.com/cesanta/mongoose/blob/master/examples/http-restful-server/main.c

This below code has hardcoded link https://localhost:8000. The server receives requests from clients using same link on same system. But if sending request with ip of server system from other system on network then getting connection refused error. How we do binding ip dynamically.

// Copyright (c) 2020 Cesanta Software Limited
// All rights reserved
//
// HTTP server example. This server serves both static and dynamic content.
// It implements the following endpoints:
//    /api/f1 - respond with JSON string {"result": 123}
//    /api/f2/:id - wildcard example, respond with JSON string {"result": "URI"}
//    any other URI serves static files from s_web_directory

// To enable SSL/TLS (using self-signed certificates in PEM files),
//    1. Change s_listen_on from http:// to https://
//    2. make MBEDTLS_DIR=/path/to/your/mbedtls/installation
//    3. curl -k https://127.0.0.1:8000

#include "mongoose.h"

static const char *s_listen_on = "https://localhost:8000";
static const char *s_web_directory = ".";

static void fn(struct mg_connection *c, int ev, void *ev_data, void *fn_data) {
  if (ev == MG_EV_ACCEPT && mg_url_is_ssl(s_listen_on)) {
    // If s_listen_on URL is https://, tell listening connection to use TLS
    struct mg_tls_opts opts = {
        //.ca = "ca.pem",         // Uncomment to enable two-way SSL
        .cert = "server.pem",     // Certificate PEM file
        .certkey = "server.pem",  // This pem conains both cert and key
    };
    mg_tls_init(c, &opts);
  } else if (ev == MG_EV_HTTP_MSG) {
    struct mg_http_message *hm = (struct mg_http_message *) ev_data;
    if (mg_http_match_uri(hm, "/api/f1")) {
      mg_http_reply(c, 200, "", "{\"result\": %d}\n", 123);  // Serve REST
    } else if (mg_http_match_uri(hm, "/api/f2/*")) {
      mg_http_reply(c, 200, "", "{\"result\": \"%.*s\"}\n", (int) hm->uri.len,
                    hm->uri.ptr);
    } else {
      struct mg_http_serve_opts opts = {.root_dir = s_web_directory};
      mg_http_serve_dir(c, ev_data, &opts);
    }
  }
  (void) fn_data;
}

int main(void) {
  struct mg_mgr mgr;                            // Event manager
  mg_log_set("2");                              // Set to 3 to enable debug
  mg_mgr_init(&mgr);                            // Initialise event manager
  mg_http_listen(&mgr, s_listen_on, fn, NULL);  // Create HTTP listener
  for (;;) mg_mgr_poll(&mgr, 1000);             // Infinite event loop
  mg_mgr_free(&mgr);
  return 0;
}

Change s_listen_on :

static const char *s_listen_on = "http://0.0.0.0:8000";

This way, it won't use SSL, and listen for incoming connections from anywhere, not just your own workstation. Listening on localhost listens only for connections from your own workstation.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM