GigaDevice
/
GD32_example_ethernet_webserver
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@0:621fd985b960, 2019-02-19 (annotated)
- 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?
User | Revision | Line number | New 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 | } |