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

网络

开发平台:

Unix_Linux

  1. /* TCPecho.c - main, TCPecho */
  2. #include <unistd.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <stdio.h>
  6. extern int errno;
  7. int TCPecho(const char *host, const char *service);
  8. int errexit(const char *format, ...);
  9. int connectTCP(const char *host, const char *service);
  10. #define LINELEN 128
  11. /*------------------------------------------------------------------------
  12.  * main - TCP client for ECHO service
  13.  *------------------------------------------------------------------------
  14.  */
  15. int
  16. main(int argc, char *argv[])
  17. {
  18. char *host = "localhost"; /* host to use if none supplied */
  19. char *service = "echo"; /* default service name */
  20. switch (argc) {
  21. case 1:
  22. host = "localhost";
  23. break;
  24. case 3:
  25. service = argv[2];
  26. /* FALL THROUGH */
  27. case 2:
  28. host = argv[1];
  29. break;
  30. default:
  31. fprintf(stderr, "usage: TCPecho [host [port]]n");
  32. exit(1);
  33. }
  34. TCPecho(host, service);
  35. exit(0);
  36. }
  37. /*------------------------------------------------------------------------
  38.  * TCPecho - send input to ECHO service on specified host and print reply
  39.  *------------------------------------------------------------------------
  40.  */
  41. int
  42. TCPecho(const char *host, const char *service)
  43. {
  44. char buf[LINELEN+1]; /* buffer for one line of text */
  45. int s, n; /* socket descriptor, read count*/
  46. int outchars, inchars; /* characters sent and received */
  47. s = connectTCP(host, service);
  48. while (fgets(buf, sizeof(buf), stdin)) {
  49. buf[LINELEN] = ''; /* insure line null-terminated */
  50. outchars = strlen(buf);
  51. (void) write(s, buf, outchars);
  52. /* read it back */
  53. for (inchars = 0; inchars < outchars; inchars+=n ) {
  54. n = read(s, &buf[inchars], outchars - inchars);
  55. if (n < 0)
  56. errexit("socket read failed: %sn",
  57. strerror(errno));
  58. }
  59. fputs(buf, stdout);
  60. }
  61. }