TCP, NTP and server Ethernet and WI-FI example working on OS5.15

Dependencies:   NTPclient

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "NTPclient.h"
00003 #include "favicon_ico.h"
00004 
00005 // define static IP settings
00006 #define IP         "192.168.1.180"
00007 #define GATEWAY    "192.168.1.1"
00008 #define NETMASK    "255.255.255.0" 
00009 #define PORT       80
00010 
00011 NetworkInterface *net = NetworkInterface::get_default_instance();
00012 NTPclient         ntp(*net);
00013 
00014 DigitalOut led(LED1);
00015 time_t seconds;
00016 
00017 char requestType[16];
00018 char request[64];
00019 
00020 char    *sendbuffer = new char[512];    // create data send buffer space
00021 char    recevbuffer[1024];              // create http receive buffer space
00022 
00023 int main()
00024 {   
00025     printf("\033[0m\033[2J\033[HTCP NTP client and server example\r\n\n\n"); // Tera Term clear screen
00026     seconds = time(NULL);     
00027     printf("Initial RTC time: %s\r\n", ctime(&seconds));    
00028 
00029     // Include to set static IP    
00030     int net_static = net->set_network((SocketAddress)IP,(SocketAddress)NETMASK,(SocketAddress)GATEWAY);
00031     
00032     printf("Connecting to network...\n\n");
00033 
00034     if (!net) {
00035         printf("No network interface found, select an interface in 'mbed_app.json'\n");
00036         return NULL;
00037     }
00038     nsapi_error_t connect_status = net->connect();
00039     if (connect_status != NSAPI_ERROR_OK) {
00040         printf("Failed to connect to network (%d)\n", connect_status);
00041         return NULL;
00042     }   
00043     
00044     SocketAddress net_addr;   
00045     net->get_ip_address(&net_addr);
00046     printf("IP address: %s\n", net_addr.get_ip_address() ? net_addr.get_ip_address() : "None");
00047     net->get_netmask(&net_addr);
00048     printf("Netmask:    %s\n", net_addr.get_ip_address() ? net_addr.get_ip_address() : "None");
00049     net->get_gateway(&net_addr);
00050     printf("Gateway:    %s\n", net_addr.get_ip_address() ? net_addr.get_ip_address() : "None");    
00051     printf("MAC:        %s\n", net->get_mac_address());  
00052 
00053     net->get_ip_address(&net_addr);
00054     const char *ip = net_addr.get_ip_address();    
00055   
00056     if(ip){ 
00057         printf("\nConnected\n\nGet NTP time...\n");
00058         if(ntp.getNTP("0.pool.ntp.org",3600,1,1)){
00059             seconds = time(NULL);
00060             printf("RTC time set by NTP: %s\n\n", ctime(&seconds));
00061             }
00062             else{printf("No NTP could not set RTC !!\n\n");
00063             }  
00064     }else{
00065         printf("No IP!!\n");
00066         while(1);
00067     }         
00068  
00069     TCPSocket srv;
00070     TCPSocket *client_sock;  // srv.accept() will return pointer to socket
00071     SocketAddress client_addr;
00072    
00073     // Open the server on ethernet stack
00074     srv.open(net);
00075     // Bind the HTTP port (TCP 80) to the server    
00076     srv.bind(80);       
00077     //Can handle x simultaneous connections
00078     srv.listen(5); 
00079     
00080     printf("The Server IP address: '%s'\n", ip);
00081     printf("Waiting for connection....\r\n\n"); 
00082      
00083     nsapi_size_or_error_t result; 
00084         
00085     while(1){
00086                            
00087         client_sock = srv.accept();  //return pointer of a client socket 
00088         led=1; 
00089             //this will fill address of client to the SocketAddress object
00090         client_sock->getpeername(&client_addr);
00091         printf("\nConnected,Client: %s Port: %d\n", client_addr.get_ip_address(), client_addr.get_port()); 
00092             //receive client data, (set large enough buffer)
00093         result = client_sock->recv(recevbuffer, 1024);        
00094         if (result < 0) {
00095             printf("Error! socket.recv() returned: %d\n", result);           
00096         }    
00097         
00098         if(result){            
00099             //printf("Received Msg:\n%s\n\n", recevbuffer);     // include to view complete receive buffer
00100             sscanf(recevbuffer,"%s %s",requestType,request);
00101             printf("request: %s Type: %s  charcters:%d\n", requestType,request,result);
00102                    
00103             if(strcmp(request,"/")==0){
00104                 //send current mcu rtc time to client
00105                 time_t seconds = time(NULL);
00106                 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));
00107                 printf("Sending Message\n");
00108                 result=client_sock->send(sendbuffer, strlen(sendbuffer));  // send data in buffer to http port.
00109                 printf("Sent Message, %d bytes\n",result);
00110             } 
00111             else if(strcmp(request,"/favicon.ico")==0){
00112                 //send favicon if requested
00113                 printf("Sending Favicon\n"); 
00114                 result=client_sock->send((char*)favicon_ico,sizeof(favicon_ico)); 
00115                 printf("Sent Favicon, %d bytes\n",result);                
00116             }
00117             else{
00118                 // send page not found reply
00119                 sprintf(sendbuffer,"HTTP/1.1 404 Not Found\nContent-type: text/plain\r\n\r\npage not found");
00120                 printf("Sending Not Found Message\n");
00121                 result=client_sock->send(sendbuffer, strlen(sendbuffer));
00122                 printf("Sent Not Found Message, %d bytes\n",result);
00123             }            
00124         }
00125         else{
00126             printf("Disconnected\n");
00127             }            
00128         //close socket       
00129         client_sock->close();            
00130         led=0;
00131     }
00132 }