SimpleSocket 1.0 examples

Dependencies:   EthernetNetIf SimpleSocket 1.0 mbed

examples/ntpclient.cpp

Committer:
yamaguch
Date:
2013-02-04
Revision:
40:84182fc63956
Parent:
ntpclient.cpp@ 39:108499af2b53

File content as of revision 40:84182fc63956:

#include "EthernetNetIf.h"
#include "SimpleSocket.h"

void ntpclient() {
    EthernetNetIf eth;
    eth.setup();
    
    char *NTP_SERVER = "pool.ntp.org";
    printf("ntp server = %s\n", NTP_SERVER);

    while (true) {
        DatagramSocket datagram;
        char buf[48] = {0x23}; // 00100011 LI(0), Version(4), Mode(3: Client)
        datagram.write(buf, sizeof(buf));
        datagram.send(NTP_SERVER, 123);
        
        if (datagram.receive() > 0) {
            if (datagram.read(buf, sizeof(buf)) > 0) {
                unsigned long seconds = 0;
                for (int i = 40; i <= 43; i++)
                    seconds = (seconds << 8) | buf[i];
                set_time(time_t(seconds - 2208988800ULL));
                char timestamp[16];
                time_t jstime = time(NULL) + 9 * 3600;
                strftime(timestamp, sizeof(timestamp), "%m/%d %X", localtime(&jstime));
                printf("Time: %s\n", timestamp);
                break;
            }
        } else {
            printf("no answer\n");
            wait(1.0);
        }
    }
}