1. /*udp demo */
    2. /* usage:
    3. * ./client serv_ip serv_port
    4. */
    5. #include "net.h"
    6. void usage (char *s)
    7. {
    8. printf ("\nThis is multicast demo!\n");
    9. printf ("\nUsage:\n\t %s serv_ip serv_port", s);
    10. printf ("\n\t serv_ip: udp server ip address(between 224~239 segment)");
    11. printf ("\n\t serv_port: udp server port(serv_port > 5000)\n\n");
    12. }
    13. int main (int argc, char *argv[])
    14. {
    15. int fd = -1;
    16. int port = SERV_PORT;
    17. port = atoi (argv[2]);
    18. if (port < 0 || (port > 0 && port <= 5000)) {
    19. usage (argv[0]);
    20. exit (1);
    21. }
    22. struct sockaddr_in sin;
    23. if (argc != 3) {
    24. usage (argv[0]);
    25. exit (1);
    26. }
    27. /* 1. 创建socket fd */
    28. if ((fd = socket (AF_INET, SOCK_DGRAM, 0)) < 0) { //UDP编程
    29. perror ("socket");
    30. exit (1);
    31. }
    32. /*2.1 填充struct sockaddr_in结构体变量 */
    33. bzero (&sin, sizeof (sin));
    34. sin.sin_family = AF_INET;
    35. sin.sin_port = htons (SERV_PORT); //网络字节序的端口号
    36. #if 0
    37. sin.sin_addr.s_addr = inet_addr (argv[1]);
    38. #else
    39. if (inet_pton (AF_INET, argv[1], (void *) &sin.sin_addr) != 1) {
    40. perror ("inet_pton");
    41. exit (1);
    42. }
    43. #endif
    44. printf ("multicast started!\n");
    45. char buf[BUFSIZ];
    46. while (1) {
    47. fprintf (stderr, "pls input string:");
    48. bzero (buf, BUFSIZ);
    49. if (fgets (buf, BUFSIZ - 1, stdin) == NULL) {
    50. perror ("fgets");
    51. continue;
    52. }
    53. sendto (fd, buf, strlen (buf), 0, (struct sockaddr *) &sin, sizeof (sin));
    54. if (!strncasecmp (buf, QUIT_STR, strlen (QUIT_STR))) { //用户输入了quit字符
    55. printf ("Client is exited!\n");
    56. break;
    57. }
    58. }
    59. close (fd);
    60. return 0;
    61. }