请教,组播测试失败
两台设备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 }
服务端:
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 }
...全文
相关推荐
实战集锦_WebLogic Server Cluster组播故障处理总结
WebLogic Server之间使用组播功能时出现通信失败的问题。
ONT组播版本配置工具V3
在使用ONT组播版本配置工具V3时,网络管理员需要注意以下几点:- 在执行版本升级前,应先备份当前版本,以防升级失败后无法恢复。- 确保ONT设备的网络连接稳定,避免在配置过程中出现通信中断。
判断魔屏电视频道组播
- **软件版本确认**:确保VLC软件版本是最新的,以避免兼容性问题导致的播放失败。- **硬件兼容性测试**:检查使用的无线网卡是否支持所需的无线标准,如802.11n。
小米(绿米)网关局域网通信(设备控制)
小米多功能网关是小米智能家居系统的核心组件,它支持UPD组播协议,使得设备间的通信变得更加高效且稳定。下面,我们将详细阐述这一过程中的关键知识点。首先,我们需要理解什么是UPD组播。
WAPI协议完整性测试之指定字段报文测试
**组播密钥通告分组中的ADDID字段**:在组播通信中,ADDID用于管理和标识地址索引,确保组播密钥的正确分发。每个字段的正确性和有效性检查都是确保WAPI协议完整性的关键步骤。


