UDP Socket application to read current time from network.
This is an UDP example to read current UTC time by sending request to NIST Internet Time Service.
Revision 0:b90f9dc5cf9c, committed 2017-10-18
- Comitter:
- deepikabhavnani
- Date:
- Wed Oct 18 21:59:15 2017 +0000
- Commit message:
- UDP Socket Sample
Changed in this revision
diff -r 000000000000 -r b90f9dc5cf9c .gitignore --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/.gitignore Wed Oct 18 21:59:15 2017 +0000 @@ -0,0 +1,4 @@ +.build +.mbed +projectfiles +*.py*
diff -r 000000000000 -r b90f9dc5cf9c README.md --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/README.md Wed Oct 18 21:59:15 2017 +0000 @@ -0,0 +1,8 @@ +### Getting started with the UDPSocket API ### + +UDP Example +This application reads the current UTC time by sending UDP packet to time.nist.gov address at port 37. + +**Note:** The current example is limited to the ethernet interface on supported devices. +To use the example with a different interface, you will need to modify main.cpp and +replace the EthernetInterface class with the appropriate interface.
diff -r 000000000000 -r b90f9dc5cf9c img/uvision.png Binary file img/uvision.png has changed
diff -r 000000000000 -r b90f9dc5cf9c main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Oct 18 21:59:15 2017 +0000 @@ -0,0 +1,46 @@ +#include "mbed.h" +#include "EthernetInterface.h" + +// Network interface +EthernetInterface net; + +// Time protocol implementation : Address: time.nist.gov UDPPort: 37 + +typedef struct { + uint32_t secs; // Transmit Time-stamp seconds. +}ntp_packet; + +int main() { + // Bring up the ethernet interface + printf("UDP Socket example\n"); + if(0 != net.connect()) { + printf("Error connecting\n"); + return -1; + } + + // Show the network address + const char *ip = net.get_ip_address(); + printf("IP address is: %s\n", ip ? ip : "No IP"); + + UDPSocket sock(&net); + SocketAddress sockAddr; + + char out_buffer[] = "time"; + if(0 > sock.sendto("time.nist.gov", 37, out_buffer, sizeof(out_buffer))) { + printf("Error sending data\n"); + return -1; + } + + ntp_packet in_data; + int n = sock.recvfrom(&sockAddr, &in_data, sizeof(ntp_packet)); + in_data.secs = ntohl( in_data.secs ) - 2208988800; // 1900-1970 + printf("Time Received %lu seconds since 1/01/1900 00:00 GMT\n", (uint32_t)in_data.secs); + printf("Time = %s", ctime(( const time_t* )&in_data.secs)); + + printf("Time Server Address: %s Port: %d\n\r", sockAddr.get_ip_address(), sockAddr.get_port()); + + // Close the socket and bring down the network interface + sock.close(); + net.disconnect(); + return 0; +}
diff -r 000000000000 -r b90f9dc5cf9c mbed-os.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-os.lib Wed Oct 18 21:59:15 2017 +0000 @@ -0,0 +1,1 @@ +https://github.com/ARMmbed/mbed-os/#6e0d01cd13e8aca7bf4d697c3699ec9225386881