UDPtime.c
上传用户:wei_4586
上传日期:2008-05-28
资源大小:18k
文件大小:1k
源码类别:

网络

开发平台:

Unix_Linux

  1. /* UDPtime.c - main */
  2. #include <sys/types.h>
  3. #include <unistd.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. #include <stdio.h>
  7. #define BUFSIZE 64
  8. #define UNIXEPOCH 2208988800UL /* UNIX epoch, in UCT secs */
  9. #define MSG "what time is it?n"
  10. extern int errno;
  11. int connectUDP(const char *host, const char *service);
  12. int errexit(const char *format, ...);
  13. /*------------------------------------------------------------------------
  14.  * main - UDP client for TIME service that prints the resulting time
  15.  *------------------------------------------------------------------------
  16.  */
  17. int
  18. main(int argc, char *argv[])
  19. {
  20. char *host = "localhost"; /* host to use if none supplied */
  21. char *service = "time"; /* default service name */
  22. time_t now; /* 32-bit integer to hold time */ 
  23. int s, n; /* socket descriptor, read count*/
  24. switch (argc) {
  25. case 1:
  26. host = "localhost";
  27. break;
  28. case 3:
  29. service = argv[2];
  30. /* FALL THROUGH */
  31. case 2:
  32. host = argv[1];
  33. break;
  34. default:
  35. fprintf(stderr, "usage: UDPtime [host [port]]n");
  36. exit(1);
  37. }
  38. s = connectUDP(host, service);
  39. (void) write(s, MSG, strlen(MSG));
  40. /* Read the time */
  41. n = read(s, (char *)&now, sizeof(now));
  42. if (n < 0)
  43. errexit("read failed: %sn", strerror(errno));
  44. now = ntohl((unsigned long)now); /* put in host order */
  45. now -= UNIXEPOCH; /* convert UCT to UNIX epoch */
  46. printf("%s", ctime(&now));
  47. exit(0);
  48. }