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.

Committer:
deepikabhavnani
Date:
Wed Oct 18 21:59:15 2017 +0000
Revision:
0:b90f9dc5cf9c
UDP Socket Sample

Who changed what in which revision?

UserRevisionLine numberNew contents of line
deepikabhavnani 0:b90f9dc5cf9c 1 #include "mbed.h"
deepikabhavnani 0:b90f9dc5cf9c 2 #include "EthernetInterface.h"
deepikabhavnani 0:b90f9dc5cf9c 3
deepikabhavnani 0:b90f9dc5cf9c 4 // Network interface
deepikabhavnani 0:b90f9dc5cf9c 5 EthernetInterface net;
deepikabhavnani 0:b90f9dc5cf9c 6
deepikabhavnani 0:b90f9dc5cf9c 7 // Time protocol implementation : Address: time.nist.gov UDPPort: 37
deepikabhavnani 0:b90f9dc5cf9c 8
deepikabhavnani 0:b90f9dc5cf9c 9 typedef struct {
deepikabhavnani 0:b90f9dc5cf9c 10 uint32_t secs; // Transmit Time-stamp seconds.
deepikabhavnani 0:b90f9dc5cf9c 11 }ntp_packet;
deepikabhavnani 0:b90f9dc5cf9c 12
deepikabhavnani 0:b90f9dc5cf9c 13 int main() {
deepikabhavnani 0:b90f9dc5cf9c 14 // Bring up the ethernet interface
deepikabhavnani 0:b90f9dc5cf9c 15 printf("UDP Socket example\n");
deepikabhavnani 0:b90f9dc5cf9c 16 if(0 != net.connect()) {
deepikabhavnani 0:b90f9dc5cf9c 17 printf("Error connecting\n");
deepikabhavnani 0:b90f9dc5cf9c 18 return -1;
deepikabhavnani 0:b90f9dc5cf9c 19 }
deepikabhavnani 0:b90f9dc5cf9c 20
deepikabhavnani 0:b90f9dc5cf9c 21 // Show the network address
deepikabhavnani 0:b90f9dc5cf9c 22 const char *ip = net.get_ip_address();
deepikabhavnani 0:b90f9dc5cf9c 23 printf("IP address is: %s\n", ip ? ip : "No IP");
deepikabhavnani 0:b90f9dc5cf9c 24
deepikabhavnani 0:b90f9dc5cf9c 25 UDPSocket sock(&net);
deepikabhavnani 0:b90f9dc5cf9c 26 SocketAddress sockAddr;
deepikabhavnani 0:b90f9dc5cf9c 27
deepikabhavnani 0:b90f9dc5cf9c 28 char out_buffer[] = "time";
deepikabhavnani 0:b90f9dc5cf9c 29 if(0 > sock.sendto("time.nist.gov", 37, out_buffer, sizeof(out_buffer))) {
deepikabhavnani 0:b90f9dc5cf9c 30 printf("Error sending data\n");
deepikabhavnani 0:b90f9dc5cf9c 31 return -1;
deepikabhavnani 0:b90f9dc5cf9c 32 }
deepikabhavnani 0:b90f9dc5cf9c 33
deepikabhavnani 0:b90f9dc5cf9c 34 ntp_packet in_data;
deepikabhavnani 0:b90f9dc5cf9c 35 int n = sock.recvfrom(&sockAddr, &in_data, sizeof(ntp_packet));
deepikabhavnani 0:b90f9dc5cf9c 36 in_data.secs = ntohl( in_data.secs ) - 2208988800; // 1900-1970
deepikabhavnani 0:b90f9dc5cf9c 37 printf("Time Received %lu seconds since 1/01/1900 00:00 GMT\n", (uint32_t)in_data.secs);
deepikabhavnani 0:b90f9dc5cf9c 38 printf("Time = %s", ctime(( const time_t* )&in_data.secs));
deepikabhavnani 0:b90f9dc5cf9c 39
deepikabhavnani 0:b90f9dc5cf9c 40 printf("Time Server Address: %s Port: %d\n\r", sockAddr.get_ip_address(), sockAddr.get_port());
deepikabhavnani 0:b90f9dc5cf9c 41
deepikabhavnani 0:b90f9dc5cf9c 42 // Close the socket and bring down the network interface
deepikabhavnani 0:b90f9dc5cf9c 43 sock.close();
deepikabhavnani 0:b90f9dc5cf9c 44 net.disconnect();
deepikabhavnani 0:b90f9dc5cf9c 45 return 0;
deepikabhavnani 0:b90f9dc5cf9c 46 }