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

Dependencies:   WIZnet_Library mbed

Fork of HTTPServer_echoback_WIZ550io by W5500-Ethernet-Interface Makers

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "WIZnetInterface.h"
00003 #include <stdio.h>
00004 #include <string.h>
00005 
00006 #define USE_DHCP    1
00007 
00008 const char * IP_Addr    = "192.168.1.2";
00009 const char * IP_Subnet  = "255.255.255.0";
00010 const char * IP_Gateway = "192.168.1.1";
00011 unsigned char MAC_Addr[6] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xD0 };
00012     
00013 Serial pc(SERIAL_TX, SERIAL_RX);
00014 
00015 SPI spi(SPI_MOSI, SPI_MISO, SPI_SCK); // mosi, miso, sclk
00016     
00017 #define PORT   80
00018 
00019 bool serverIsListened = false;
00020 bool clientIsConnected = false;
00021 
00022 int main (void)
00023 {
00024   spi.frequency(1000000);
00025   WIZnetInterface ethernet(&spi,D10, D3);
00026 
00027   pc.printf("Ethernet Init\r\n");
00028 #if USE_DHCP
00029   int ret = ethernet.init(MAC_Addr);
00030 #else
00031   int ret = ethernet.init(MAC_Addr,IP_Addr,IP_Subnet,IP_Gateway);
00032 #endif
00033 
00034   if (!ret) 
00035   {
00036     pc.printf("Initialized, MAC: %s\r\n", ethernet.getMACAddress());
00037     ret = ethernet.connect();
00038     
00039     if (!ret) 
00040     {
00041       pc.printf("IP: %s, MASK: %s, GW: %s\r\n", ethernet.getIPAddress(), ethernet.getNetworkMask(), ethernet.getGateway());
00042     }
00043     else
00044     {
00045       pc.printf("Error ethernet.connect() - ret = %d\r\n", ret);
00046       exit(0);
00047     }
00048   }
00049   else
00050   {
00051     pc.printf("Error ethernet.init() - ret = %d\r\n", ret);
00052     exit(0);
00053   }
00054 
00055     // late binding 
00056     TCPSocketServer svr;
00057     TCPSocketConnection client;
00058     
00059     //setup tcp socket
00060     if(svr.bind(PORT)< 0) 
00061     {
00062         pc.printf("tcp server bind failed.\n\r");
00063         return -1;
00064     } 
00065     else
00066      {
00067         pc.printf("tcp server bind successed.\n\r");
00068         serverIsListened = true;
00069     }
00070 
00071     if(svr.listen(1) < 0)
00072      {
00073         pc.printf("tcp server listen failed.\n\r");
00074         return -1;
00075     }
00076     else
00077     {
00078         pc.printf("tcp server is listening...\n\r");
00079     }
00080 
00081     //listening for http GET request
00082   while (serverIsListened) 
00083   {
00084     //blocking mode(never timeout)
00085     if(svr.accept(client)<0) 
00086     {
00087       pc.printf("failed to accept connection.\n\r");
00088     }
00089     else 
00090     {
00091       pc.printf("connection success!\n\rIP: %s\n\r",client.get_address());
00092       clientIsConnected = true;
00093 
00094       while(clientIsConnected) 
00095       {
00096         char buffer[1024] = {};
00097                 
00098         switch(client.receive(buffer, 1023)) 
00099         {
00100           case 0:
00101             pc.printf("recieved buffer is empty.\n\r");
00102             clientIsConnected = false;
00103             break;
00104                         
00105           case -1:
00106             pc.printf("failed to read data from client.\n\r");
00107             clientIsConnected = false;
00108             break;
00109                         
00110           default:
00111             pc.printf("Recieved Data: %d\n\r\n\r%.*s\n\r",strlen(buffer),strlen(buffer),buffer);
00112                         
00113             if(buffer[0] == 'G' && buffer[1] == 'E' && buffer[2] == 'T' ) 
00114             {
00115               pc.printf("GET request incomming.\n\r");
00116               //setup http response header & data
00117               char echoHeader[256] = {};
00118               sprintf(echoHeader,"HTTP/1.1 200 OK\n\rContent-Length: %d\n\rContent-Type: text\n\rConnection: Close\n\r\n\r",strlen(buffer));
00119               client.send(echoHeader,strlen(echoHeader));
00120               client.send(buffer,strlen(buffer));
00121               clientIsConnected = false;
00122               pc.printf("echo back done.\n\r");
00123             }
00124             
00125             break;
00126         }
00127       }
00128             
00129       pc.printf("close connection.\n\rtcp server is listening...\n\r");
00130             
00131       client.close();
00132     }
00133   }
00134 }