A simple example of ethernet webserver for mbed-os.

Getting started with Ethernet webserver

This is the Ethernet webserver example for mbed OS.

main.cpp

Committer:
c_jin
Date:
2019-02-19
Revision:
0:621fd985b960

File content as of revision 0:621fd985b960:

/* mbed Microcontroller Library
 * Copyright (c) 2018 GigaDevice Limited
 * SPDX-License-Identifier: Apache-2.0
 */

#include "mbed.h"
#include "EthernetInterface.h"
#include "TCPServer.h"
#include "TCPSocket.h"

/* 1 = Use DHCP */
/* 0 = Use default IP */
#define DEMO_DHCP_ENABLE        0

#if (0 == DEMO_DHCP_ENABLE)
#define DEVICE_IP       "192.168.57.156"
#define DEVICE_MASK     "255.255.255.0"
#define DEVICE_GATEWAY  "192.168.57.1"
#endif
    
const char html_contex[] = {
/* HTTP header */
/* "HTTP/1.0 200 OK
" (17 bytes) */
0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x30,0x20,0x32,0x30,0x30,0x20,0x4f,0x4b,0x0d,
0x0a,
/* "Content-type: text/html
" (27 bytes) */
0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x74,0x65,
0x78,0x74,0x2f,0x68,0x74,0x6d,0x6c,0x0d,0x0a,0x0d,0x0a,
/* raw file data (380 bytes) */
0x3c,0x21,0x44,0x4f,0x43,0x54,0x59,0x50,0x45,0x20,0x68,0x74,0x6d,0x6c,0x20,0x50,
0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,
0x54,0x44,0x20,0x58,0x48,0x54,0x4d,0x4c,0x20,0x31,0x2e,0x30,0x20,0x54,0x72,0x61,
0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x61,0x6c,0x2f,0x2f,0x45,0x4e,0x22,0x20,0x22,
0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,
0x67,0x2f,0x54,0x52,0x2f,0x78,0x68,0x74,0x6d,0x6c,0x31,0x2f,0x44,0x54,0x44,0x2f,
0x78,0x68,0x74,0x6d,0x6c,0x31,0x2d,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,
0x6e,0x61,0x6c,0x2e,0x64,0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x68,0x74,0x6d,0x6c,
0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,
0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,
0x68,0x74,0x6d,0x6c,0x22,0x3e,0x0d,0x0a,0x3c,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,
0x3c,0x6d,0x65,0x74,0x61,0x20,0x68,0x74,0x74,0x70,0x2d,0x65,0x71,0x75,0x69,0x76,
0x3d,0x22,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x54,0x79,0x70,0x65,0x22,0x20,
0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x3d,0x22,0x74,0x65,0x78,0x74,0x2f,0x68,0x74,
0x6d,0x6c,0x3b,0x20,0x63,0x68,0x61,0x72,0x73,0x65,0x74,0x3d,0x75,0x74,0x66,0x2d,
0x38,0x22,0x20,0x2f,0x3e,0x0d,0x0a,0x3c,0x2f,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,
0x3c,0x62,0x6f,0x64,0x79,0x3e,0x0d,0x0a,0x3c,0x64,0x69,0x76,0x20,0x61,0x6c,0x69,
0x67,0x6e,0x3d,0x22,0x63,0x65,0x6e,0x74,0x65,0x72,0x22,0x3e,0x0d,0x0a,0x20,0x20,
0x3c,0x68,0x31,0x3e,0x3c,0x73,0x74,0x72,0x6f,0x6e,0x67,0x3e,0x48,0x65,0x6c,0x6c,
0x6f,0x20,0x57,0x6f,0x72,0x6c,0x64,0x0d,0x0a,0x20,0x20,0x3c,0x2f,0x73,0x74,0x72,
0x6f,0x6e,0x67,0x3e,0x3c,0x2f,0x68,0x31,0x3e,0x0d,0x0a,0x3c,0x2f,0x64,0x69,0x76,
0x3e,0x0d,0x0a,0x3c,0x68,0x72,0x20,0x2f,0x3e,0x0d,0x0a,0x3c,0x70,0x3e,0x26,0x6e,
0x62,0x73,0x70,0x3b,0x3c,0x2f,0x70,0x3e,0x0d,0x0a,0x3c,0x2f,0x62,0x6f,0x64,0x79,
0x3e,0x0d,0x0a,0x3c,0x2f,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a,};
    
EthernetInterface enet;

int main()
{
    nsapi_size_or_error_t result;
    
    printf("Mbed OS HTTP server example start \r\n");
    
#if (0 == DEMO_DHCP_ENABLE)
    /* Disable DHCP */
    enet.set_dhcp(0);
    enet.set_network(DEVICE_IP, DEVICE_MASK, DEVICE_GATEWAY);
#else
    /* Enable DHCP */
    enet.set_dhcp(1);
#endif
    
    if(enet.connect() != 0){
        printf("Network initialization failed \r\n");
        while(1);
    }else{
        printf("The device IP address is '%s' \r\n", enet.get_ip_address());
        printf("The device NetMask is '%s' \r\n", enet.get_netmask());
        printf("The device GateWay is '%s' \r\n", enet.get_gateway());
    }
    
    TCPServer http_srv;
    TCPSocket cli_sock;
    SocketAddress cli_addr;
    
    result = http_srv.open(&enet);
    if (result != 0) {
        printf("Error! http_srv.open() returned: %d\n", result);
    }
    
    /* Bind socket to the HTTP port(80) */
    result = http_srv.bind(enet.get_ip_address(), 80);
    if (result != 0) {
        printf("Error! http_srv.bind() returned: %d\n", result);
    }
    
    http_srv.listen(5);
    
    while (1) {
        http_srv.accept(&cli_sock, &cli_addr);
        printf("Server accept successful, remote is %s:%d\n", cli_addr.get_ip_address(), cli_addr.get_port());
        cli_sock.send(html_contex, sizeof(html_contex));
    }
}