This is a working example for the depreciated string based API mbed server socket function. Solid on LPC1768. I have included a 32k favicon file for web page stability. Multiple simultaneous connections are no issue here.
Diff: main.cpp
- Revision:
- 0:8e3c163d3dbb
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sat Jun 13 13:19:17 2020 +0000 @@ -0,0 +1,117 @@ +#include "mbed.h" +#include "NetworkInterface.h" +#include "NTPclient.h" +#include "favicon_ico.h" + +// define static IP settings +#define IP "192.168.1.180" +#define GATEWAY "192.168.1.1" +#define NETMASK "255.255.255.0" +#define PORT 80 + +NetworkInterface *net = NetworkInterface::get_default_instance(); + +TCPServer server; +TCPSocket client; +SocketAddress clientAddress; + +NTPclient ntp(*net); + +DigitalOut led(LED1); +time_t seconds; + +char requestType[16]; +char request[64]; + +char *sendbuffer = new char[512]; // create data send buffer space +char recevbuffer[1024]; // create http receive buffer space + +int main() +{ + printf("\033[0m\033[2J\033[HTCP NTP client and server example\r\n\n\n"); // Tera Term clear screen + seconds = time(NULL); + printf("Initial RTC time: %s\r\n", ctime(&seconds)); + + // Include to set static IP + net->set_network (IP, NETMASK, GATEWAY); + + printf("Connecting to network...\n\n"); + + nsapi_size_or_error_t r = net->connect(); + if (r != 0) { + printf("Error! net.connect() returned: %d\n", r); + while(1); // stop here and find the connection problem + } + + const char *ip = net->get_ip_address(); + + if(ip){ + printf("\nConnected\n\nGet NTP time...\n"); + if(ntp.getNTP("0.pool.ntp.org",3600,1,1)){ + seconds = time(NULL); + printf("RTC time set by NTP: %s\n\n", ctime(&seconds)); + } + else{printf("No NTP could not set RTC !!\n\n"); + } + }else{ + printf("No IP!!\n"); + while(1); + } + + printf("Starting Server...\r\n\n"); + + /* Open the server on ethernet stack */ + server.open(net); + /* Bind the HTTP port (TCP 80) to the server */ + server.bind(ip, 80); + /* Can handle 5 simultaneous connections */ + server.listen(5); + //listening for http GET request + printf("Ready\r\n\n"); + + printf("The Server IP address: '%s'\n", ip); + printf("Waiting for connection....\r\n\n"); + + nsapi_size_or_error_t result; + + while(1){ + + server.accept(&client, &clientAddress); + + led=1; + result=client.recv(recevbuffer, 1024); + if (result < 0) { + printf("Error! socket.recv() returned: %d\n", result); + } + + sscanf(recevbuffer,"%s %s",requestType,request); + printf("\nClient IP: %s \n", clientAddress.get_ip_address()); + //printf("Received Msg:\n%s\n\n", recevbuffer); // include to view complete receive buffer + printf("request: %s Type: %s\n", requestType,request); + + if(strcmp(request,"/")==0){ + //send current mcu rtc time to client + time_t seconds = time(NULL); + sprintf(sendbuffer,"HTTP/1.1 200 OK\n Content-type: text/plain\r\n\r\n <h1> Hello !!</h1>\r\n\n <h1>Time is: %s</h1>\r\n", ctime(&seconds)); + printf("Sending Message\n"); + result=client.send(sendbuffer, strlen(sendbuffer)); // send data in buffer to http port. + printf("Sent Message, %d bytes\n",result); + } + else if(strcmp(request,"/favicon.ico")==0){ + //send favicon if requested + printf("Sending Favicon\n"); + result=client.send((char*)favicon_ico,sizeof(favicon_ico)); + printf("Sent Favicon, %d bytes\n",result); + } + else{ + // send page not found reply + sprintf(sendbuffer,"HTTP/1.1 404 Not Found\nContent-type: text/plain\r\n\r\npage not found"); + printf("Sending Not Found Message\n"); + result=client.send(sendbuffer, strlen(sendbuffer)); + printf("Sent Not Found Message, %d bytes\n",result); + } + //close socket + client.close(); + led=0; + } +}