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

Committer:
hsgw
Date:
Fri Mar 08 02:24:33 2013 +0000
Revision:
15:eae1575da9ca
Parent:
13:25ce35614dd1
add message

Who changed what in which revision?

UserRevisionLine numberNew contents of line
donatien 0:bb128f0e952f 1 #include "mbed.h"
donatien 0:bb128f0e952f 2 #include "EthernetInterface.h"
hsgw 13:25ce35614dd1 3 #include <stdio.h>
hsgw 13:25ce35614dd1 4 #include <string.h>
donatien 0:bb128f0e952f 5
hsgw 13:25ce35614dd1 6 #define PORT 80
hsgw 13:25ce35614dd1 7
hsgw 13:25ce35614dd1 8 EthernetInterface eth;
hsgw 13:25ce35614dd1 9
hsgw 13:25ce35614dd1 10 TCPSocketServer svr;
hsgw 13:25ce35614dd1 11 bool serverIsListened = false;
hsgw 13:25ce35614dd1 12
hsgw 13:25ce35614dd1 13 TCPSocketConnection client;
hsgw 13:25ce35614dd1 14 bool clientIsConnected = false;
hsgw 13:25ce35614dd1 15
hsgw 13:25ce35614dd1 16 DigitalOut led1(LED1); //server listning status
hsgw 13:25ce35614dd1 17 DigitalOut led2(LED2); //socket connecting status
hsgw 13:25ce35614dd1 18
hsgw 13:25ce35614dd1 19 Ticker ledTick;
hsgw 13:25ce35614dd1 20
hsgw 13:25ce35614dd1 21 void ledTickfunc()
hsgw 13:25ce35614dd1 22 {
hsgw 13:25ce35614dd1 23 if(serverIsListened) {
hsgw 13:25ce35614dd1 24 led1 = !led1;
hsgw 13:25ce35614dd1 25 } else {
hsgw 13:25ce35614dd1 26 led1 = false;
hsgw 13:25ce35614dd1 27 }
hsgw 13:25ce35614dd1 28 }
hsgw 13:25ce35614dd1 29
hsgw 13:25ce35614dd1 30 int main (void)
hsgw 13:25ce35614dd1 31 {
hsgw 13:25ce35614dd1 32 ledTick.attach(&ledTickfunc,0.5);
hsgw 13:25ce35614dd1 33
hsgw 13:25ce35614dd1 34 //setup ethernet interface
donatien 0:bb128f0e952f 35 eth.init(); //Use DHCP
donatien 0:bb128f0e952f 36 eth.connect();
hsgw 13:25ce35614dd1 37 printf("IP Address is %s\n\r", eth.getIPAddress());
hsgw 13:25ce35614dd1 38
hsgw 13:25ce35614dd1 39 //setup tcp socket
hsgw 13:25ce35614dd1 40 if(svr.bind(PORT)< 0) {
hsgw 13:25ce35614dd1 41 printf("tcp server bind failed.\n\r");
hsgw 13:25ce35614dd1 42 return -1;
hsgw 13:25ce35614dd1 43 } else {
hsgw 13:25ce35614dd1 44 printf("tcp server bind successed.\n\r");
hsgw 13:25ce35614dd1 45 serverIsListened = true;
hsgw 13:25ce35614dd1 46 }
hsgw 13:25ce35614dd1 47
hsgw 13:25ce35614dd1 48 if(svr.listen(1) < 0) {
hsgw 13:25ce35614dd1 49 printf("tcp server listen failed.\n\r");
hsgw 13:25ce35614dd1 50 return -1;
hsgw 13:25ce35614dd1 51 } else {
hsgw 13:25ce35614dd1 52 printf("tcp server is listening...\n\r");
emilmont 7:65188f4a8c25 53 }
hsgw 13:25ce35614dd1 54
hsgw 13:25ce35614dd1 55 //listening for http GET request
hsgw 13:25ce35614dd1 56 while (serverIsListened) {
hsgw 15:eae1575da9ca 57 //blocking mode(never timeout)
hsgw 13:25ce35614dd1 58 if(svr.accept(client)<0) {
hsgw 13:25ce35614dd1 59 printf("failed to accept connection.\n\r");
hsgw 13:25ce35614dd1 60 } else {
hsgw 13:25ce35614dd1 61 printf("connection success!\n\rIP: %s\n\r",client.get_address());
hsgw 13:25ce35614dd1 62 clientIsConnected = true;
hsgw 13:25ce35614dd1 63 led2 = true;
hsgw 13:25ce35614dd1 64
hsgw 13:25ce35614dd1 65 while(clientIsConnected) {
hsgw 13:25ce35614dd1 66 char buffer[1024] = {};
hsgw 13:25ce35614dd1 67 switch(client.receive(buffer, 1023)) {
hsgw 13:25ce35614dd1 68 case 0:
hsgw 13:25ce35614dd1 69 printf("recieved buffer is empty.\n\r");
hsgw 13:25ce35614dd1 70 clientIsConnected = false;
hsgw 13:25ce35614dd1 71 break;
hsgw 13:25ce35614dd1 72 case -1:
hsgw 13:25ce35614dd1 73 printf("failed to read data from client.\n\r");
hsgw 13:25ce35614dd1 74 clientIsConnected = false;
hsgw 13:25ce35614dd1 75 break;
hsgw 13:25ce35614dd1 76 default:
hsgw 13:25ce35614dd1 77 printf("Recieved Data: %d\n\r\n\r%.*s\n\r",strlen(buffer),strlen(buffer),buffer);
hsgw 13:25ce35614dd1 78 if(buffer[0] == 'G' && buffer[1] == 'E' && buffer[2] == 'T' ) {
hsgw 13:25ce35614dd1 79 printf("GET request incomming.\n\r");
hsgw 13:25ce35614dd1 80 //setup http response header & data
hsgw 13:25ce35614dd1 81 char echoHeader[256] = {};
hsgw 13:25ce35614dd1 82 sprintf(echoHeader,"HTTP/1.1 200 OK\n\rContent-Length: %d\n\rContent-Type: text\n\rConnection: Close\n\r\n\r",strlen(buffer));
hsgw 13:25ce35614dd1 83 client.send(echoHeader,strlen(echoHeader));
hsgw 13:25ce35614dd1 84 client.send(buffer,strlen(buffer));
hsgw 13:25ce35614dd1 85 clientIsConnected = false;
hsgw 13:25ce35614dd1 86 printf("echo back done.\n\r");
hsgw 13:25ce35614dd1 87 }
hsgw 13:25ce35614dd1 88 break;
hsgw 13:25ce35614dd1 89 }
hsgw 13:25ce35614dd1 90 }
hsgw 13:25ce35614dd1 91 printf("close connection.\n\rtcp server is listening...\n\r");
hsgw 13:25ce35614dd1 92 client.close();
hsgw 13:25ce35614dd1 93 led2 = false;
hsgw 13:25ce35614dd1 94 }
hsgw 13:25ce35614dd1 95 }
donatien 0:bb128f0e952f 96 }