A simple example of ethernet webserver for mbed-os.

Getting started with Ethernet webserver

This is the Ethernet webserver example for mbed OS.

Committer:
c_jin
Date:
Tue Feb 19 11:48:03 2019 +0000
Revision:
0:621fd985b960
A simple example of Ethernet webserver demo for mbed-os.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
c_jin 0:621fd985b960 1 /* mbed Microcontroller Library
c_jin 0:621fd985b960 2 * Copyright (c) 2018 GigaDevice Limited
c_jin 0:621fd985b960 3 * SPDX-License-Identifier: Apache-2.0
c_jin 0:621fd985b960 4 */
c_jin 0:621fd985b960 5
c_jin 0:621fd985b960 6 #include "mbed.h"
c_jin 0:621fd985b960 7 #include "EthernetInterface.h"
c_jin 0:621fd985b960 8 #include "TCPServer.h"
c_jin 0:621fd985b960 9 #include "TCPSocket.h"
c_jin 0:621fd985b960 10
c_jin 0:621fd985b960 11 /* 1 = Use DHCP */
c_jin 0:621fd985b960 12 /* 0 = Use default IP */
c_jin 0:621fd985b960 13 #define DEMO_DHCP_ENABLE 0
c_jin 0:621fd985b960 14
c_jin 0:621fd985b960 15 #if (0 == DEMO_DHCP_ENABLE)
c_jin 0:621fd985b960 16 #define DEVICE_IP "192.168.57.156"
c_jin 0:621fd985b960 17 #define DEVICE_MASK "255.255.255.0"
c_jin 0:621fd985b960 18 #define DEVICE_GATEWAY "192.168.57.1"
c_jin 0:621fd985b960 19 #endif
c_jin 0:621fd985b960 20
c_jin 0:621fd985b960 21 const char html_contex[] = {
c_jin 0:621fd985b960 22 /* HTTP header */
c_jin 0:621fd985b960 23 /* "HTTP/1.0 200 OK
c_jin 0:621fd985b960 24 " (17 bytes) */
c_jin 0:621fd985b960 25 0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x30,0x20,0x32,0x30,0x30,0x20,0x4f,0x4b,0x0d,
c_jin 0:621fd985b960 26 0x0a,
c_jin 0:621fd985b960 27 /* "Content-type: text/html
c_jin 0:621fd985b960 28 " (27 bytes) */
c_jin 0:621fd985b960 29 0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x74,0x65,
c_jin 0:621fd985b960 30 0x78,0x74,0x2f,0x68,0x74,0x6d,0x6c,0x0d,0x0a,0x0d,0x0a,
c_jin 0:621fd985b960 31 /* raw file data (380 bytes) */
c_jin 0:621fd985b960 32 0x3c,0x21,0x44,0x4f,0x43,0x54,0x59,0x50,0x45,0x20,0x68,0x74,0x6d,0x6c,0x20,0x50,
c_jin 0:621fd985b960 33 0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,
c_jin 0:621fd985b960 34 0x54,0x44,0x20,0x58,0x48,0x54,0x4d,0x4c,0x20,0x31,0x2e,0x30,0x20,0x54,0x72,0x61,
c_jin 0:621fd985b960 35 0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x61,0x6c,0x2f,0x2f,0x45,0x4e,0x22,0x20,0x22,
c_jin 0:621fd985b960 36 0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,
c_jin 0:621fd985b960 37 0x67,0x2f,0x54,0x52,0x2f,0x78,0x68,0x74,0x6d,0x6c,0x31,0x2f,0x44,0x54,0x44,0x2f,
c_jin 0:621fd985b960 38 0x78,0x68,0x74,0x6d,0x6c,0x31,0x2d,0x74,0x72,0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,
c_jin 0:621fd985b960 39 0x6e,0x61,0x6c,0x2e,0x64,0x74,0x64,0x22,0x3e,0x0d,0x0a,0x3c,0x68,0x74,0x6d,0x6c,
c_jin 0:621fd985b960 40 0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,
c_jin 0:621fd985b960 41 0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x31,0x39,0x39,0x39,0x2f,0x78,
c_jin 0:621fd985b960 42 0x68,0x74,0x6d,0x6c,0x22,0x3e,0x0d,0x0a,0x3c,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,
c_jin 0:621fd985b960 43 0x3c,0x6d,0x65,0x74,0x61,0x20,0x68,0x74,0x74,0x70,0x2d,0x65,0x71,0x75,0x69,0x76,
c_jin 0:621fd985b960 44 0x3d,0x22,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x54,0x79,0x70,0x65,0x22,0x20,
c_jin 0:621fd985b960 45 0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x3d,0x22,0x74,0x65,0x78,0x74,0x2f,0x68,0x74,
c_jin 0:621fd985b960 46 0x6d,0x6c,0x3b,0x20,0x63,0x68,0x61,0x72,0x73,0x65,0x74,0x3d,0x75,0x74,0x66,0x2d,
c_jin 0:621fd985b960 47 0x38,0x22,0x20,0x2f,0x3e,0x0d,0x0a,0x3c,0x2f,0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,
c_jin 0:621fd985b960 48 0x3c,0x62,0x6f,0x64,0x79,0x3e,0x0d,0x0a,0x3c,0x64,0x69,0x76,0x20,0x61,0x6c,0x69,
c_jin 0:621fd985b960 49 0x67,0x6e,0x3d,0x22,0x63,0x65,0x6e,0x74,0x65,0x72,0x22,0x3e,0x0d,0x0a,0x20,0x20,
c_jin 0:621fd985b960 50 0x3c,0x68,0x31,0x3e,0x3c,0x73,0x74,0x72,0x6f,0x6e,0x67,0x3e,0x48,0x65,0x6c,0x6c,
c_jin 0:621fd985b960 51 0x6f,0x20,0x57,0x6f,0x72,0x6c,0x64,0x0d,0x0a,0x20,0x20,0x3c,0x2f,0x73,0x74,0x72,
c_jin 0:621fd985b960 52 0x6f,0x6e,0x67,0x3e,0x3c,0x2f,0x68,0x31,0x3e,0x0d,0x0a,0x3c,0x2f,0x64,0x69,0x76,
c_jin 0:621fd985b960 53 0x3e,0x0d,0x0a,0x3c,0x68,0x72,0x20,0x2f,0x3e,0x0d,0x0a,0x3c,0x70,0x3e,0x26,0x6e,
c_jin 0:621fd985b960 54 0x62,0x73,0x70,0x3b,0x3c,0x2f,0x70,0x3e,0x0d,0x0a,0x3c,0x2f,0x62,0x6f,0x64,0x79,
c_jin 0:621fd985b960 55 0x3e,0x0d,0x0a,0x3c,0x2f,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a,};
c_jin 0:621fd985b960 56
c_jin 0:621fd985b960 57 EthernetInterface enet;
c_jin 0:621fd985b960 58
c_jin 0:621fd985b960 59 int main()
c_jin 0:621fd985b960 60 {
c_jin 0:621fd985b960 61 nsapi_size_or_error_t result;
c_jin 0:621fd985b960 62
c_jin 0:621fd985b960 63 printf("Mbed OS HTTP server example start \r\n");
c_jin 0:621fd985b960 64
c_jin 0:621fd985b960 65 #if (0 == DEMO_DHCP_ENABLE)
c_jin 0:621fd985b960 66 /* Disable DHCP */
c_jin 0:621fd985b960 67 enet.set_dhcp(0);
c_jin 0:621fd985b960 68 enet.set_network(DEVICE_IP, DEVICE_MASK, DEVICE_GATEWAY);
c_jin 0:621fd985b960 69 #else
c_jin 0:621fd985b960 70 /* Enable DHCP */
c_jin 0:621fd985b960 71 enet.set_dhcp(1);
c_jin 0:621fd985b960 72 #endif
c_jin 0:621fd985b960 73
c_jin 0:621fd985b960 74 if(enet.connect() != 0){
c_jin 0:621fd985b960 75 printf("Network initialization failed \r\n");
c_jin 0:621fd985b960 76 while(1);
c_jin 0:621fd985b960 77 }else{
c_jin 0:621fd985b960 78 printf("The device IP address is '%s' \r\n", enet.get_ip_address());
c_jin 0:621fd985b960 79 printf("The device NetMask is '%s' \r\n", enet.get_netmask());
c_jin 0:621fd985b960 80 printf("The device GateWay is '%s' \r\n", enet.get_gateway());
c_jin 0:621fd985b960 81 }
c_jin 0:621fd985b960 82
c_jin 0:621fd985b960 83 TCPServer http_srv;
c_jin 0:621fd985b960 84 TCPSocket cli_sock;
c_jin 0:621fd985b960 85 SocketAddress cli_addr;
c_jin 0:621fd985b960 86
c_jin 0:621fd985b960 87 result = http_srv.open(&enet);
c_jin 0:621fd985b960 88 if (result != 0) {
c_jin 0:621fd985b960 89 printf("Error! http_srv.open() returned: %d\n", result);
c_jin 0:621fd985b960 90 }
c_jin 0:621fd985b960 91
c_jin 0:621fd985b960 92 /* Bind socket to the HTTP port(80) */
c_jin 0:621fd985b960 93 result = http_srv.bind(enet.get_ip_address(), 80);
c_jin 0:621fd985b960 94 if (result != 0) {
c_jin 0:621fd985b960 95 printf("Error! http_srv.bind() returned: %d\n", result);
c_jin 0:621fd985b960 96 }
c_jin 0:621fd985b960 97
c_jin 0:621fd985b960 98 http_srv.listen(5);
c_jin 0:621fd985b960 99
c_jin 0:621fd985b960 100 while (1) {
c_jin 0:621fd985b960 101 http_srv.accept(&cli_sock, &cli_addr);
c_jin 0:621fd985b960 102 printf("Server accept successful, remote is %s:%d\n", cli_addr.get_ip_address(), cli_addr.get_port());
c_jin 0:621fd985b960 103 cli_sock.send(html_contex, sizeof(html_contex));
c_jin 0:621fd985b960 104 }
c_jin 0:621fd985b960 105 }