- 论坛徽章:
- 0
|
两台设备PC都是fedora8.用下面这两段服务器,客户端组播代码。服务器发送数据,客户无法接收数据。请问是怎么回事?
服务端:
1 #include <stdio.h>
2 #include <string.h>
3 #include <sys/socket.h>
4 #include <arpa/inet.h>
5 #include <netinet/in.h>
6 #define MAXBUF 256
7 #define PUERTO 5000
8 #define GRUPO "224.0.1.1"
9
10 int main()
11 {
12 int s;
13 struct sockaddr_in srv;
14 char buf[MAXBUF];
15 bzero(&srv, sizeof(srv));
16 srv.sin_family = AF_INET;
17 srv.sin_port = htons(PUERTO);
18 if (inet_aton(GRUPO, &srv.sin_addr) < 0)
19 {
20 perror("inet_aton");
21 return 1;
22 }
23 if ((s = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
24 {
25 perror("socket");
26 return 1;
27 }
28 while (fgets(buf, MAXBUF, stdin))
29 {
30 if (sendto(s, buf, strlen(buf), 0, (struct sockaddr *)&srv, sizeof(srv)) < 0)
31 {
32 perror("recvfrom");
33 }
34 else
35 {
36 fprintf(stdout, "Enviado a %s: %s", GRUPO, buf);
37 }
38 }
39 }
客户端:
1 #include <stdio.h>
2 #include <string.h>
3 #include <sys/socket.h>
4 #include <arpa/inet.h>
5 #include <netinet/in.h>
6 #define MAXBUF 256
7 #define PUERTO 5000
8 #define GRUPO "224.0.1.1"
9
10 int main()
11 {
12 int s, n, r;
13 struct sockaddr_in srv, cli;
14 struct ip_mreq mreq;
15 char buf[MAXBUF];
16 bzero(&srv, sizeof(srv));
17 srv.sin_family = AF_INET;
18 srv.sin_port = htons(PUERTO);
19 if (inet_aton(GRUPO, &srv.sin_addr) < 0)
20 {
21 perror("inet_aton");
22 return 1;
23 }
24 if ((s = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
25 {
26 perror("socket");
27 return 1;
28 }
29 if (bind(s, (struct sockaddr *)&srv, sizeof(srv)) < 0)
30 {
31 perror("bind");
32 return 1;
33 }
34 if (inet_aton(GRUPO, &mreq.imr_multiaddr) < 0)
35 {
36 perror("inet_aton");
37 return 1;
38 }
39 mreq.imr_interface.s_addr = htonl(INADDR_ANY);
40 if (setsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)) < 0)
41 {
42 perror("setsockopt");
43 return 1;
44 }
45 n = sizeof(cli);
46 while (1)
47 {
48 if ((r = recvfrom(s, buf, MAXBUF, 0, (struct sockaddr *)&cli, &n)) < 0)
49 {
50 perror("recvfrom");
51 }
52 else
53 {
54 buf[r] = '\0';
55 fprintf(stdout, "Mensaje desde %s: %s", inet_ntoa(cli.sin_addr), buf);
56 }
57 }
58 }
36,1-8 顶端
~ |
|