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

Committer:
sjallouli
Date:
Wed Dec 30 23:26:05 2015 +0000
Revision:
21:8f790ebb9f3c
Parent:
20:f0c3af075949
Port to NUCLEO-STM32F401

Who changed what in which revision?

UserRevisionLine numberNew contents of line
donatien 0:bb128f0e952f 1 #include "mbed.h"
sjallouli 21:8f790ebb9f3c 2 #include "WIZnetInterface.h"
hsgw 13:25ce35614dd1 3 #include <stdio.h>
hsgw 13:25ce35614dd1 4 #include <string.h>
donatien 0:bb128f0e952f 5
sjallouli 21:8f790ebb9f3c 6 #define USE_DHCP 1
hsgw 13:25ce35614dd1 7
sjallouli 21:8f790ebb9f3c 8 const char * IP_Addr = "192.168.1.2";
sjallouli 21:8f790ebb9f3c 9 const char * IP_Subnet = "255.255.255.0";
sjallouli 21:8f790ebb9f3c 10 const char * IP_Gateway = "192.168.1.1";
sjallouli 21:8f790ebb9f3c 11 unsigned char MAC_Addr[6] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xD0 };
sjallouli 21:8f790ebb9f3c 12
sjallouli 21:8f790ebb9f3c 13 Serial pc(SERIAL_TX, SERIAL_RX);
sjallouli 21:8f790ebb9f3c 14
sjallouli 21:8f790ebb9f3c 15 SPI spi(SPI_MOSI, SPI_MISO, SPI_SCK); // mosi, miso, sclk
sjallouli 21:8f790ebb9f3c 16
sjallouli 21:8f790ebb9f3c 17 #define PORT 80
sjallouli 21:8f790ebb9f3c 18
hsgw 13:25ce35614dd1 19 bool serverIsListened = false;
hsgw 13:25ce35614dd1 20 bool clientIsConnected = false;
hsgw 13:25ce35614dd1 21
hsgw 13:25ce35614dd1 22 int main (void)
hsgw 13:25ce35614dd1 23 {
sjallouli 21:8f790ebb9f3c 24 spi.frequency(1000000);
sjallouli 21:8f790ebb9f3c 25 WIZnetInterface ethernet(&spi,D10, D3);
Bongjun 16:ea8f49af2d86 26
sjallouli 21:8f790ebb9f3c 27 pc.printf("Ethernet Init\r\n");
sjallouli 21:8f790ebb9f3c 28 #if USE_DHCP
sjallouli 21:8f790ebb9f3c 29 int ret = ethernet.init(MAC_Addr);
sjallouli 21:8f790ebb9f3c 30 #else
sjallouli 21:8f790ebb9f3c 31 int ret = ethernet.init(MAC_Addr,IP_Addr,IP_Subnet,IP_Gateway);
sjallouli 21:8f790ebb9f3c 32 #endif
Bongjun 16:ea8f49af2d86 33
sjallouli 21:8f790ebb9f3c 34 if (!ret)
sjallouli 21:8f790ebb9f3c 35 {
sjallouli 21:8f790ebb9f3c 36 pc.printf("Initialized, MAC: %s\r\n", ethernet.getMACAddress());
sjallouli 21:8f790ebb9f3c 37 ret = ethernet.connect();
sjallouli 21:8f790ebb9f3c 38
sjallouli 21:8f790ebb9f3c 39 if (!ret)
sjallouli 21:8f790ebb9f3c 40 {
sjallouli 21:8f790ebb9f3c 41 pc.printf("IP: %s, MASK: %s, GW: %s\r\n", ethernet.getIPAddress(), ethernet.getNetworkMask(), ethernet.getGateway());
sjallouli 21:8f790ebb9f3c 42 }
sjallouli 21:8f790ebb9f3c 43 else
sjallouli 21:8f790ebb9f3c 44 {
sjallouli 21:8f790ebb9f3c 45 pc.printf("Error ethernet.connect() - ret = %d\r\n", ret);
sjallouli 21:8f790ebb9f3c 46 exit(0);
sjallouli 21:8f790ebb9f3c 47 }
sjallouli 21:8f790ebb9f3c 48 }
sjallouli 21:8f790ebb9f3c 49 else
sjallouli 21:8f790ebb9f3c 50 {
sjallouli 21:8f790ebb9f3c 51 pc.printf("Error ethernet.init() - ret = %d\r\n", ret);
sjallouli 21:8f790ebb9f3c 52 exit(0);
sjallouli 21:8f790ebb9f3c 53 }
Bongjun 16:ea8f49af2d86 54
Bongjun 17:c42419afb2f8 55 // late binding
Bongjun 17:c42419afb2f8 56 TCPSocketServer svr;
Bongjun 17:c42419afb2f8 57 TCPSocketConnection client;
Bongjun 20:f0c3af075949 58
sjallouli 21:8f790ebb9f3c 59 //setup tcp socket
sjallouli 21:8f790ebb9f3c 60 if(svr.bind(PORT)< 0)
sjallouli 21:8f790ebb9f3c 61 {
sjallouli 21:8f790ebb9f3c 62 pc.printf("tcp server bind failed.\n\r");
Bongjun 16:ea8f49af2d86 63 return -1;
sjallouli 21:8f790ebb9f3c 64 }
sjallouli 21:8f790ebb9f3c 65 else
sjallouli 21:8f790ebb9f3c 66 {
sjallouli 21:8f790ebb9f3c 67 pc.printf("tcp server bind successed.\n\r");
hsgw 13:25ce35614dd1 68 serverIsListened = true;
hsgw 13:25ce35614dd1 69 }
hsgw 13:25ce35614dd1 70
sjallouli 21:8f790ebb9f3c 71 if(svr.listen(1) < 0)
sjallouli 21:8f790ebb9f3c 72 {
sjallouli 21:8f790ebb9f3c 73 pc.printf("tcp server listen failed.\n\r");
hsgw 13:25ce35614dd1 74 return -1;
sjallouli 21:8f790ebb9f3c 75 }
sjallouli 21:8f790ebb9f3c 76 else
sjallouli 21:8f790ebb9f3c 77 {
sjallouli 21:8f790ebb9f3c 78 pc.printf("tcp server is listening...\n\r");
emilmont 7:65188f4a8c25 79 }
hsgw 13:25ce35614dd1 80
hsgw 13:25ce35614dd1 81 //listening for http GET request
sjallouli 21:8f790ebb9f3c 82 while (serverIsListened)
sjallouli 21:8f790ebb9f3c 83 {
sjallouli 21:8f790ebb9f3c 84 //blocking mode(never timeout)
sjallouli 21:8f790ebb9f3c 85 if(svr.accept(client)<0)
sjallouli 21:8f790ebb9f3c 86 {
sjallouli 21:8f790ebb9f3c 87 pc.printf("failed to accept connection.\n\r");
sjallouli 21:8f790ebb9f3c 88 }
sjallouli 21:8f790ebb9f3c 89 else
sjallouli 21:8f790ebb9f3c 90 {
sjallouli 21:8f790ebb9f3c 91 pc.printf("connection success!\n\rIP: %s\n\r",client.get_address());
sjallouli 21:8f790ebb9f3c 92 clientIsConnected = true;
Bongjun 17:c42419afb2f8 93
sjallouli 21:8f790ebb9f3c 94 while(clientIsConnected)
sjallouli 21:8f790ebb9f3c 95 {
sjallouli 21:8f790ebb9f3c 96 char buffer[1024] = {};
sjallouli 21:8f790ebb9f3c 97
sjallouli 21:8f790ebb9f3c 98 switch(client.receive(buffer, 1023))
sjallouli 21:8f790ebb9f3c 99 {
sjallouli 21:8f790ebb9f3c 100 case 0:
sjallouli 21:8f790ebb9f3c 101 pc.printf("recieved buffer is empty.\n\r");
sjallouli 21:8f790ebb9f3c 102 clientIsConnected = false;
sjallouli 21:8f790ebb9f3c 103 break;
sjallouli 21:8f790ebb9f3c 104
sjallouli 21:8f790ebb9f3c 105 case -1:
sjallouli 21:8f790ebb9f3c 106 pc.printf("failed to read data from client.\n\r");
sjallouli 21:8f790ebb9f3c 107 clientIsConnected = false;
sjallouli 21:8f790ebb9f3c 108 break;
sjallouli 21:8f790ebb9f3c 109
sjallouli 21:8f790ebb9f3c 110 default:
sjallouli 21:8f790ebb9f3c 111 pc.printf("Recieved Data: %d\n\r\n\r%.*s\n\r",strlen(buffer),strlen(buffer),buffer);
sjallouli 21:8f790ebb9f3c 112
sjallouli 21:8f790ebb9f3c 113 if(buffer[0] == 'G' && buffer[1] == 'E' && buffer[2] == 'T' )
sjallouli 21:8f790ebb9f3c 114 {
sjallouli 21:8f790ebb9f3c 115 pc.printf("GET request incomming.\n\r");
sjallouli 21:8f790ebb9f3c 116 //setup http response header & data
sjallouli 21:8f790ebb9f3c 117 char echoHeader[256] = {};
sjallouli 21:8f790ebb9f3c 118 sprintf(echoHeader,"HTTP/1.1 200 OK\n\rContent-Length: %d\n\rContent-Type: text\n\rConnection: Close\n\r\n\r",strlen(buffer));
sjallouli 21:8f790ebb9f3c 119 client.send(echoHeader,strlen(echoHeader));
sjallouli 21:8f790ebb9f3c 120 client.send(buffer,strlen(buffer));
sjallouli 21:8f790ebb9f3c 121 clientIsConnected = false;
sjallouli 21:8f790ebb9f3c 122 pc.printf("echo back done.\n\r");
hsgw 13:25ce35614dd1 123 }
sjallouli 21:8f790ebb9f3c 124
sjallouli 21:8f790ebb9f3c 125 break;
hsgw 13:25ce35614dd1 126 }
sjallouli 21:8f790ebb9f3c 127 }
sjallouli 21:8f790ebb9f3c 128
sjallouli 21:8f790ebb9f3c 129 pc.printf("close connection.\n\rtcp server is listening...\n\r");
sjallouli 21:8f790ebb9f3c 130
sjallouli 21:8f790ebb9f3c 131 client.close();
hsgw 13:25ce35614dd1 132 }
sjallouli 21:8f790ebb9f3c 133 }
donatien 0:bb128f0e952f 134 }