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.
main.cpp@0:b90f9dc5cf9c, 2017-10-18 (annotated)
- Committer:
- deepikabhavnani
- Date:
- Wed Oct 18 21:59:15 2017 +0000
- Revision:
- 0:b90f9dc5cf9c
UDP Socket Sample
Who changed what in which revision?
User | Revision | Line number | New 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 | } |