Paul Staron
/
TCP-NTP-Server
TCP, NTP and server Ethernet and WI-FI example working on OS5.15
Diff: main.cpp
- Revision:
- 5:3ef245bbc6ef
- Parent:
- 3:91523db40ebd
diff -r 3db4aca72fbd -r 3ef245bbc6ef main.cpp --- a/main.cpp Sun Mar 08 14:35:57 2020 +0000 +++ b/main.cpp Sat Jun 13 13:02:54 2020 +0000 @@ -1,7 +1,8 @@ #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" @@ -13,8 +14,11 @@ 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 +char recevbuffer[1024]; // create http receive buffer space int main() { @@ -51,7 +55,7 @@ if(ip){ printf("\nConnected\n\nGet NTP time...\n"); - if(ntp.getNTP("0.pool.ntp.org",0,1,1)){ + if(ntp.getNTP("0.pool.ntp.org",3600,1,1)){ seconds = time(NULL); printf("RTC time set by NTP: %s\n\n", ctime(&seconds)); } @@ -65,29 +69,64 @@ TCPSocket srv; TCPSocket *client_sock; // srv.accept() will return pointer to socket SocketAddress client_addr; - + // Open the server on ethernet stack srv.open(net); // Bind the HTTP port (TCP 80) to the server srv.bind(80); //Can handle x simultaneous connections - srv.listen(5); + srv.listen(5); printf("The Server IP address: '%s'\n", ip); printf("Waiting for connection....\r\n\n"); + + nsapi_size_or_error_t result; while(1){ client_sock = srv.accept(); //return pointer of a client socket - led=1; - client_sock->recv(recevbuffer, 1024); // set size of required receive data length - client_sock->getpeername(&client_addr); //this will fill address of client to the SocketAddress object - printf("Accepted %s:%d\n\n", client_addr.get_ip_address(), client_addr.get_port()); - printf("Received Msg:\n%s\n\n", recevbuffer); - time_t seconds = time(NULL); //get current mcu rtc time - 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)); - client_sock->send(sendbuffer, strlen(sendbuffer)); // send data in buffer to http port. - client_sock->close(); + led=1; + //this will fill address of client to the SocketAddress object + client_sock->getpeername(&client_addr); + printf("\nConnected,Client: %s Port: %d\n", client_addr.get_ip_address(), client_addr.get_port()); + //receive client data, (set large enough buffer) + result = client_sock->recv(recevbuffer, 1024); + if (result < 0) { + printf("Error! socket.recv() returned: %d\n", result); + } + + if(result){ + //printf("Received Msg:\n%s\n\n", recevbuffer); // include to view complete receive buffer + sscanf(recevbuffer,"%s %s",requestType,request); + printf("request: %s Type: %s charcters:%d\n", requestType,request,result); + + 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_sock->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_sock->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_sock->send(sendbuffer, strlen(sendbuffer)); + printf("Sent Not Found Message, %d bytes\n",result); + } + } + else{ + printf("Disconnected\n"); + } + //close socket + client_sock->close(); led=0; } }