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.

Dependencies:   NTPclient

Committer:
star297
Date:
Sat Jun 13 13:24:10 2020 +0000
Revision:
1:b7b5017e8d01
Parent:
0:8e3c163d3dbb
tidy .json

Who changed what in which revision?

UserRevisionLine numberNew contents of line
star297 0:8e3c163d3dbb 1 #include "mbed.h"
star297 0:8e3c163d3dbb 2 #include "NetworkInterface.h"
star297 0:8e3c163d3dbb 3 #include "NTPclient.h"
star297 0:8e3c163d3dbb 4 #include "favicon_ico.h"
star297 0:8e3c163d3dbb 5
star297 0:8e3c163d3dbb 6 // define static IP settings
star297 0:8e3c163d3dbb 7 #define IP "192.168.1.180"
star297 0:8e3c163d3dbb 8 #define GATEWAY "192.168.1.1"
star297 0:8e3c163d3dbb 9 #define NETMASK "255.255.255.0"
star297 0:8e3c163d3dbb 10 #define PORT 80
star297 0:8e3c163d3dbb 11
star297 0:8e3c163d3dbb 12 NetworkInterface *net = NetworkInterface::get_default_instance();
star297 0:8e3c163d3dbb 13
star297 0:8e3c163d3dbb 14 TCPServer server;
star297 0:8e3c163d3dbb 15 TCPSocket client;
star297 0:8e3c163d3dbb 16 SocketAddress clientAddress;
star297 0:8e3c163d3dbb 17
star297 0:8e3c163d3dbb 18 NTPclient ntp(*net);
star297 0:8e3c163d3dbb 19
star297 0:8e3c163d3dbb 20 DigitalOut led(LED1);
star297 0:8e3c163d3dbb 21 time_t seconds;
star297 0:8e3c163d3dbb 22
star297 0:8e3c163d3dbb 23 char requestType[16];
star297 0:8e3c163d3dbb 24 char request[64];
star297 0:8e3c163d3dbb 25
star297 0:8e3c163d3dbb 26 char *sendbuffer = new char[512]; // create data send buffer space
star297 0:8e3c163d3dbb 27 char recevbuffer[1024]; // create http receive buffer space
star297 0:8e3c163d3dbb 28
star297 0:8e3c163d3dbb 29 int main()
star297 0:8e3c163d3dbb 30 {
star297 0:8e3c163d3dbb 31 printf("\033[0m\033[2J\033[HTCP NTP client and server example\r\n\n\n"); // Tera Term clear screen
star297 0:8e3c163d3dbb 32 seconds = time(NULL);
star297 0:8e3c163d3dbb 33 printf("Initial RTC time: %s\r\n", ctime(&seconds));
star297 0:8e3c163d3dbb 34
star297 0:8e3c163d3dbb 35 // Include to set static IP
star297 0:8e3c163d3dbb 36 net->set_network (IP, NETMASK, GATEWAY);
star297 0:8e3c163d3dbb 37
star297 0:8e3c163d3dbb 38 printf("Connecting to network...\n\n");
star297 0:8e3c163d3dbb 39
star297 0:8e3c163d3dbb 40 nsapi_size_or_error_t r = net->connect();
star297 0:8e3c163d3dbb 41 if (r != 0) {
star297 0:8e3c163d3dbb 42 printf("Error! net.connect() returned: %d\n", r);
star297 0:8e3c163d3dbb 43 while(1); // stop here and find the connection problem
star297 0:8e3c163d3dbb 44 }
star297 0:8e3c163d3dbb 45
star297 0:8e3c163d3dbb 46 const char *ip = net->get_ip_address();
star297 0:8e3c163d3dbb 47
star297 0:8e3c163d3dbb 48 if(ip){
star297 0:8e3c163d3dbb 49 printf("\nConnected\n\nGet NTP time...\n");
star297 0:8e3c163d3dbb 50 if(ntp.getNTP("0.pool.ntp.org",3600,1,1)){
star297 0:8e3c163d3dbb 51 seconds = time(NULL);
star297 0:8e3c163d3dbb 52 printf("RTC time set by NTP: %s\n\n", ctime(&seconds));
star297 0:8e3c163d3dbb 53 }
star297 0:8e3c163d3dbb 54 else{printf("No NTP could not set RTC !!\n\n");
star297 0:8e3c163d3dbb 55 }
star297 0:8e3c163d3dbb 56 }else{
star297 0:8e3c163d3dbb 57 printf("No IP!!\n");
star297 0:8e3c163d3dbb 58 while(1);
star297 0:8e3c163d3dbb 59 }
star297 0:8e3c163d3dbb 60
star297 0:8e3c163d3dbb 61 printf("Starting Server...\r\n\n");
star297 0:8e3c163d3dbb 62
star297 0:8e3c163d3dbb 63 /* Open the server on ethernet stack */
star297 0:8e3c163d3dbb 64 server.open(net);
star297 0:8e3c163d3dbb 65 /* Bind the HTTP port (TCP 80) to the server */
star297 0:8e3c163d3dbb 66 server.bind(ip, 80);
star297 0:8e3c163d3dbb 67 /* Can handle 5 simultaneous connections */
star297 0:8e3c163d3dbb 68 server.listen(5);
star297 0:8e3c163d3dbb 69 //listening for http GET request
star297 0:8e3c163d3dbb 70 printf("Ready\r\n\n");
star297 0:8e3c163d3dbb 71
star297 0:8e3c163d3dbb 72 printf("The Server IP address: '%s'\n", ip);
star297 0:8e3c163d3dbb 73 printf("Waiting for connection....\r\n\n");
star297 0:8e3c163d3dbb 74
star297 0:8e3c163d3dbb 75 nsapi_size_or_error_t result;
star297 0:8e3c163d3dbb 76
star297 0:8e3c163d3dbb 77 while(1){
star297 0:8e3c163d3dbb 78
star297 0:8e3c163d3dbb 79 server.accept(&client, &clientAddress);
star297 0:8e3c163d3dbb 80
star297 0:8e3c163d3dbb 81 led=1;
star297 0:8e3c163d3dbb 82 result=client.recv(recevbuffer, 1024);
star297 0:8e3c163d3dbb 83 if (result < 0) {
star297 0:8e3c163d3dbb 84 printf("Error! socket.recv() returned: %d\n", result);
star297 0:8e3c163d3dbb 85 }
star297 0:8e3c163d3dbb 86
star297 0:8e3c163d3dbb 87 sscanf(recevbuffer,"%s %s",requestType,request);
star297 0:8e3c163d3dbb 88 printf("\nClient IP: %s \n", clientAddress.get_ip_address());
star297 0:8e3c163d3dbb 89 //printf("Received Msg:\n%s\n\n", recevbuffer); // include to view complete receive buffer
star297 0:8e3c163d3dbb 90 printf("request: %s Type: %s\n", requestType,request);
star297 0:8e3c163d3dbb 91
star297 0:8e3c163d3dbb 92 if(strcmp(request,"/")==0){
star297 0:8e3c163d3dbb 93 //send current mcu rtc time to client
star297 0:8e3c163d3dbb 94 time_t seconds = time(NULL);
star297 0:8e3c163d3dbb 95 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));
star297 0:8e3c163d3dbb 96 printf("Sending Message\n");
star297 0:8e3c163d3dbb 97 result=client.send(sendbuffer, strlen(sendbuffer)); // send data in buffer to http port.
star297 0:8e3c163d3dbb 98 printf("Sent Message, %d bytes\n",result);
star297 0:8e3c163d3dbb 99 }
star297 0:8e3c163d3dbb 100 else if(strcmp(request,"/favicon.ico")==0){
star297 0:8e3c163d3dbb 101 //send favicon if requested
star297 0:8e3c163d3dbb 102 printf("Sending Favicon\n");
star297 0:8e3c163d3dbb 103 result=client.send((char*)favicon_ico,sizeof(favicon_ico));
star297 0:8e3c163d3dbb 104 printf("Sent Favicon, %d bytes\n",result);
star297 0:8e3c163d3dbb 105 }
star297 0:8e3c163d3dbb 106 else{
star297 0:8e3c163d3dbb 107 // send page not found reply
star297 0:8e3c163d3dbb 108 sprintf(sendbuffer,"HTTP/1.1 404 Not Found\nContent-type: text/plain\r\n\r\npage not found");
star297 0:8e3c163d3dbb 109 printf("Sending Not Found Message\n");
star297 0:8e3c163d3dbb 110 result=client.send(sendbuffer, strlen(sendbuffer));
star297 0:8e3c163d3dbb 111 printf("Sent Not Found Message, %d bytes\n",result);
star297 0:8e3c163d3dbb 112 }
star297 0:8e3c163d3dbb 113 //close socket
star297 0:8e3c163d3dbb 114 client.close();
star297 0:8e3c163d3dbb 115 led=0;
star297 0:8e3c163d3dbb 116 }
star297 0:8e3c163d3dbb 117 }