Simple HTTP server example with EthernetInterface lib. access the mbed via any browser, mbed echo back http request header.

Dependencies:   EthernetInterface mbed-rtos mbed

Fork of TCPSocket_HelloWorld by mbed official

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "EthernetInterface.h"
00003 #include <stdio.h>
00004 #include <string.h>
00005 
00006 #define PORT   80
00007 
00008 EthernetInterface eth;
00009 
00010 TCPSocketServer svr;
00011 bool serverIsListened = false;
00012 
00013 TCPSocketConnection client;
00014 bool clientIsConnected = false;
00015 
00016 DigitalOut led1(LED1); //server listning status
00017 DigitalOut led2(LED2); //socket connecting status
00018 
00019 Ticker ledTick;
00020 
00021 void ledTickfunc()
00022 {
00023     if(serverIsListened)  {
00024         led1 = !led1;
00025     } else {
00026         led1 = false;
00027     }
00028 }
00029 
00030 int main (void)
00031 {
00032     ledTick.attach(&ledTickfunc,0.5);
00033 
00034     //setup ethernet interface
00035     eth.init(); //Use DHCP
00036     eth.connect();
00037     printf("IP Address is %s\n\r", eth.getIPAddress());
00038 
00039     //setup tcp socket
00040     if(svr.bind(PORT)< 0) {
00041         printf("tcp server bind failed.\n\r");
00042         return -1;
00043     } else {
00044         printf("tcp server bind successed.\n\r");
00045         serverIsListened = true;
00046     }
00047 
00048     if(svr.listen(1) < 0) {
00049         printf("tcp server listen failed.\n\r");
00050         return -1;
00051     } else {
00052         printf("tcp server is listening...\n\r");
00053     }
00054 
00055     //listening for http GET request
00056     while (serverIsListened) {
00057         //blocking mode(never timeout)
00058         if(svr.accept(client)<0) {
00059             printf("failed to accept connection.\n\r");
00060         } else {
00061             printf("connection success!\n\rIP: %s\n\r",client.get_address());
00062             clientIsConnected = true;
00063             led2 = true;
00064             
00065             while(clientIsConnected) {
00066                 char buffer[1024] = {};
00067                 switch(client.receive(buffer, 1023)) {
00068                     case 0:
00069                         printf("recieved buffer is empty.\n\r");
00070                         clientIsConnected = false;
00071                         break;
00072                     case -1:
00073                         printf("failed to read data from client.\n\r");
00074                         clientIsConnected = false;
00075                         break;
00076                     default:
00077                         printf("Recieved Data: %d\n\r\n\r%.*s\n\r",strlen(buffer),strlen(buffer),buffer);
00078                         if(buffer[0] == 'G' && buffer[1] == 'E' && buffer[2] == 'T' ) {
00079                             printf("GET request incomming.\n\r");
00080                             //setup http response header & data
00081                             char echoHeader[256] = {};
00082                             sprintf(echoHeader,"HTTP/1.1 200 OK\n\rContent-Length: %d\n\rContent-Type: text\n\rConnection: Close\n\r\n\r",strlen(buffer));
00083                             client.send(echoHeader,strlen(echoHeader));
00084                             client.send(buffer,strlen(buffer));
00085                             clientIsConnected = false;
00086                             printf("echo back done.\n\r");
00087                         }
00088                         break;
00089                 }
00090             }
00091             printf("close connection.\n\rtcp server is listening...\n\r");
00092             client.close();
00093             led2 = false;
00094         }
00095     }
00096 }