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

Dependencies:   NTPclient

main.cpp

Committer:
star297
Date:
2020-03-08
Revision:
3:91523db40ebd
Parent:
2:06cbf3f53592
Child:
5:3ef245bbc6ef

File content as of revision 3:91523db40ebd:

#include "mbed.h"
#include "NetworkInterface.h"
#include "NTPclient.h"

#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();
NTPclient         ntp(*net);

DigitalOut led(LED1);
time_t seconds;

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    
    int net_static = net->set_network((SocketAddress)IP,(SocketAddress)NETMASK,(SocketAddress)GATEWAY);
    
    printf("Connecting to network...\n\n");

    if (!net) {
        printf("No network interface found, select an interface in 'mbed_app.json'\n");
        return NULL;
    }
    nsapi_error_t connect_status = net->connect();
    if (connect_status != NSAPI_ERROR_OK) {
        printf("Failed to connect to network (%d)\n", connect_status);
        return NULL;
    }   
    
    SocketAddress net_addr;   
    net->get_ip_address(&net_addr);
    printf("IP address: %s\n", net_addr.get_ip_address() ? net_addr.get_ip_address() : "None");
    net->get_netmask(&net_addr);
    printf("Netmask:    %s\n", net_addr.get_ip_address() ? net_addr.get_ip_address() : "None");
    net->get_gateway(&net_addr);
    printf("Gateway:    %s\n", net_addr.get_ip_address() ? net_addr.get_ip_address() : "None");    
    printf("MAC:        %s\n", net->get_mac_address());  

    net->get_ip_address(&net_addr);
    const char *ip = net_addr.get_ip_address();    
  
    if(ip){ 
        printf("\nConnected\n\nGet NTP time...\n");
        if(ntp.getNTP("0.pool.ntp.org",0,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);
    }         
 
    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);
    
    printf("The Server IP address: '%s'\n", ip);
    printf("Waiting for connection....\r\n\n"); 
        
    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=0;
    }
}