Simple HTTP server example with WIZ550io, W5500 (WIZnet chipset) .access the mbed via any browser, mbed echo back http request header.

Dependencies:   W5500Interface mbed

Fork of HTTPServer_echoback_WIZ550io by Bongjun Hur

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 "EthernetInterfaceW5500.h"
00004 #include <stdio.h>
00005 #include <string.h>
00006 
00007 //#define PORT   80
00008 #define PORT   888
00009 #define _DHCP
00010 
00011 // move to main().
00012 //EthernetInterface eth;
00013 
00014 // move to main().
00015 //TCPSocketServer svr;
00016 bool serverIsListened = false;
00017 
00018 // move to main().
00019 //TCPSocketConnection client;
00020 bool clientIsConnected = false;
00021 DigitalOut led1(LED1); //server listning status
00022 DigitalOut led2(LED2); //socket connecting status
00023 
00024 Ticker ledTick;
00025 
00026 void ledTickfunc()
00027 {
00028     if(serverIsListened)  {
00029         led1 = !led1;
00030     } else {
00031         led1 = false;
00032     }
00033 }
00034 
00035 int main (void)
00036 {
00037 #if defined(TARGET_LPC1114)
00038     SPI spi(dp2, dp1, dp6); // mosi, miso, sclk
00039     EthernetInterface eth(&spi, dp25, dp26); // spi, cs, reset
00040 
00041 #elif defined(TARGET_LPC1768)
00042     SPI spi(p11, p12, p13); // mosi, miso, sclk
00043     EthernetInterface eth(&spi, p14, p15); // spi, cs, reset
00044 
00045 #elif defined(TARGET_LPC11U68)
00046     SPI spi(P0_9, P0_8, P1_29); // mosi, miso, sclk
00047     EthernetInterface eth(&spi, P0_2, P1_28);//, nRESET(p9); // reset pin is dummy, don't affect any pin of WIZ550io
00048     spi.format(8,0); // 8bit, mode 0
00049     spi.frequency(7000000); // 7MHz
00050     wait(1); // 1 second for stable state
00051 #elif defined (TARGET_NUCLEO_F030R8)
00052     SPI spi(SPI_MOSI, SPI_MISO, SPI_SCK); // mosi, miso, sclk
00053     EthernetInterface eth(&spi, PB_6, PA_9);//, nRESET(p9); // reset pin is dummy, don't affect any pin of WIZ550io
00054     spi.format(8,0); // 8bit, mode 0
00055     spi.frequency(7000000); // 7MHz
00056     wait(1); // 1 second for stable state
00057 
00058 #endif
00059 
00060     // late binding 
00061     TCPSocketServer svr;
00062     TCPSocketConnection client;
00063 
00064     ledTick.attach(&ledTickfunc,0.5);
00065 
00066     /*
00067         //setup ethernet interface
00068         eth.init(); //Use DHCP
00069         eth.connect();
00070         printf("IP Address is %s\n\r", eth.getIPAddress());
00071     */
00072 
00073     printf("Board is on\r\n");
00074     
00075 #ifdef _DHCP 
00076 // didn't test yet in DHCP => TEST OK...
00077 
00078     printf("eth.init()\r\n");
00079     eth.init(); //Use DHCP
00080     printf("eth.connect()\r\n");
00081     eth.connect();
00082     //printf("IP Address is %s\n\r", eth.getIPAddress());
00083     printf("Initialized, MAC: %s\n", eth.getMACAddress());
00084     printf("Connected, IP: %s, MASK: %s, GW: %s\n",
00085            eth.getIPAddress(), eth.getNetworkMask(), eth.getGateway());
00086 
00087 #else
00088     // as your env. change to real IP address and so on.
00089     int ret = eth.init("222.98.173.212", "255.255.255.192", "222.98.173.254");
00090     if (!ret) {
00091         printf("Initialized, MAC: %s\n", eth.getMACAddress());
00092         printf("Connected, IP: %s, MASK: %s, GW: %s\n",
00093                eth.getIPAddress(), eth.getNetworkMask(), eth.getGateway());
00094     } else {
00095         printf("Error eth.init() - ret = %d\n", ret);
00096         return -1;
00097     }
00098 #endif
00099 
00100     //setup tcp socket
00101     if(svr.bind(PORT)< 0) {
00102         printf("tcp server bind failed.\n\r");
00103         return -1;
00104     } else {
00105         printf("tcp server bind successed.\n\r");
00106         serverIsListened = true;
00107     }
00108 
00109     if(svr.listen(1) < 0) {
00110         printf("tcp server listen failed.\n\r");
00111         return -1;
00112     } else {
00113         printf("tcp server is listening...\n\r");
00114     }
00115 
00116     //listening for http GET request
00117     while (serverIsListened) {
00118         //blocking mode(never timeout)
00119         if(svr.accept(client)<0) {
00120             printf("failed to accept connection.\n\r");
00121         } else {
00122             printf("connection success!\n\rIP: %s\n\r",client.get_address());
00123             clientIsConnected = true;
00124             led2 = true;
00125 
00126             while(clientIsConnected) {
00127                 char buffer[1024] = {};
00128                 switch(client.receive(buffer, 1023)) {
00129                     case 0:
00130                         printf("recieved buffer is empty.\n\r");
00131                         clientIsConnected = false;
00132                         break;
00133                     case -1:
00134                         printf("failed to read data from client.\n\r");
00135                         clientIsConnected = false;
00136                         break;
00137                     default:
00138                         printf("Recieved Data: %d\n\r\n\r%.*s\n\r",strlen(buffer),strlen(buffer),buffer);
00139                         if(buffer[0] == 'G' && buffer[1] == 'E' && buffer[2] == 'T' ) {
00140                             printf("GET request incomming.\n\r");
00141                             //setup http response header & data
00142                             char echoHeader[256] = {};
00143                             sprintf(echoHeader,"HTTP/1.1 200 OK\n\rContent-Length: %d\n\rContent-Type: text\n\rConnection: Close\n\r\n\r",strlen(buffer));
00144                             client.send(echoHeader,strlen(echoHeader));
00145                             client.send(buffer,strlen(buffer));
00146                             clientIsConnected = false;
00147                             printf("echo back done.\n\r");
00148                         }
00149                         break;
00150                 }
00151             }
00152             printf("close connection.\n\rtcp server is listening...\n\r");
00153             client.close();
00154             led2 = false;
00155         }
00156     }
00157 }