test_udp.c
上传用户:gzpyjq
上传日期:2013-01-31
资源大小:1852k
文件大小:2k
源码类别:

手机WAP编程

开发平台:

WINDOWS

  1. /*
  2.  * test_udp.c - program to test UDP packet functions
  3.  *
  4.  * This program implements a simple ping-pong server.
  5.  *
  6.  * Lars Wirzenius
  7.  */
  8. #include "gwlib/gwlib.h"
  9. #include <string.h>
  10. static char usage[] = "
  11. Usage: test_udp client server_portn
  12.        test_udp server server_portn
  13. ";
  14. #define PING "ping"
  15. #define PONG "pong"
  16. #define TIMES 10
  17. static void client(int port) {
  18. int i, s;
  19. Octstr *ping, *pong, *addr, *from;
  20. s = udp_client_socket();
  21. ping = octstr_create(PING);
  22. addr = udp_create_address(octstr_create("localhost"), port);
  23. if (s == -1 || addr == NULL)
  24. panic(0, "Couldn't set up client socket.");
  25. for (i = 0; i < TIMES; ++i) {
  26. if (udp_sendto(s, ping, addr) == -1)
  27. panic(0, "Couldn't send ping.");
  28. if (udp_recvfrom(s, &pong, &from) == -1)
  29. panic(0, "Couldn't receive pong");
  30. info(0, "Got <%s> from <%s:%d>", octstr_get_cstr(pong),
  31. octstr_get_cstr(udp_get_ip(from)), 
  32. udp_get_port(from));
  33. }
  34. }
  35. static void server(int port) {
  36. int i, s;
  37. Octstr *ping, *pong, *from;
  38. s = udp_bind(port,"0.0.0.0");
  39. pong = octstr_create(PONG);
  40. if (s == -1)
  41. panic(0, "Couldn't set up client socket.");
  42. for (i = 0; i < TIMES; ++i) {
  43. if (udp_recvfrom(s, &ping, &from) == -1)
  44. panic(0, "Couldn't receive ping");
  45. info(0, "Got <%s> from <%s:%d>", octstr_get_cstr(ping),
  46. octstr_get_cstr(udp_get_ip(from)), 
  47. udp_get_port(from));
  48. if (udp_sendto(s, pong, from) == -1)
  49. panic(0, "Couldn't send pong.");
  50. }
  51. }
  52. int main(int argc, char **argv) {
  53. int port;
  54. gwlib_init();
  55. if (argc != 3)
  56. panic(0, "Bad argument listn%s", usage);
  57. port = atoi(argv[2]);
  58. if (strcmp(argv[1], "client") == 0)
  59. client(port);
  60. else
  61. server(port);
  62. return 0;
  63. }