client.c 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #include <stdio.h>
  2. #include <sys/types.h>
  3. #include <sys/fcntl.h>
  4. #include <sys/socket.h>
  5. #include <netinet/in.h>
  6. extern int errno;
  7. #define SERV_HOST_ADDR "128.220.101.4"
  8. #define SERV_TCP_PORT 6000
  9. main()
  10. {
  11. int fd;
  12. struct sockaddr_in my_addr;
  13. struct sockaddr_in serv_addr;
  14. char buf[128];
  15. void echo_driver(int, struct sockaddr_in *);
  16. if ((fd = net_open ("/dev/udp", O_RDWR)) < 0)
  17. {
  18. fprintf (stderr, "open failed.\n");
  19. exit (-1);
  20. }
  21. /*
  22. * bind any address to us.
  23. */
  24. bzero((char *) &my_addr, sizeof(my_addr));
  25. my_addr.sin_family = AF_INET;
  26. my_addr.sin_addr.s_addr = htonl (INADDR_ANY);
  27. my_addr.sin_port = htons(0);
  28. fd = net_bind (fd, &my_addr, sizeof (struct sockaddr_in));
  29. /*
  30. * set up server's address
  31. */
  32. bzero((char *) &serv_addr, sizeof(serv_addr));
  33. serv_addr.sin_family = AF_INET;
  34. serv_addr.sin_addr.s_addr = inet_addr (SERV_HOST_ADDR);
  35. serv_addr.sin_port = htons(SERV_TCP_PORT);
  36. echo_driver (fd, &serv_addr);
  37. close (fd);
  38. exit (0);
  39. }
  40. void
  41. echo_driver(int fd, struct sockaddr_in *serv_addr)
  42. {
  43. char buf[512];
  44. int n;
  45. struct sockaddr_in fm_addr;
  46. while ((n = read (0, buf, sizeof (buf))) != 0)
  47. {
  48. net_send (fd, buf, n, serv_addr, sizeof (struct sockaddr_in));
  49. n = net_recv (fd, buf, sizeof (buf), &fm_addr, sizeof (struct sockaddr_in));
  50. write (1, buf, n);
  51. }
  52. return;
  53. }