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
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 }
Generated on Wed Jul 13 2022 05:32:00 by 1.7.2