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
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 }
Generated on Fri Jul 15 2022 11:22:35 by 1.7.2