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
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 }
Generated on Thu Jul 14 2022 02:06:35 by 1.7.2