请教,组播测试失败

phz1985 2008-10-18 09:35:12
两台设备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 }
...全文
265 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
sontiago 2008-12-02
  • 打赏
  • 举报
回复
是不是发送的消息太短,而设置的sendbuffer太大的原因??
Gdatasheet 2008-11-22
  • 打赏
  • 举报
回复
路过,也学学
iisbsd 2008-11-21
  • 打赏
  • 举报
回复
你用getsockopt看一下默认的IP_MULTICAST_TTL是不是太小了?
phz1985 2008-10-19
  • 打赏
  • 举报
回复
交换机是D_LINK DES_1024D,我上网查了下,此交换机不支持VLAN.
但是我在windows下用超限组播测试工具却能成功发送和接收。
这是怎么回事?

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧