作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
嗨,我正在编写一个多播代码,它执行以下操作:
1) 它在命令行上获取多播组 IP 和端口。它加入组并等待消息。2)每 15 秒发送一次“hello-”+ time() 来统计组中有多少成员。3)任何收到“hello-”+time()的成员,都会简单地回显相同的内容。发送hello的成员(member)统计5秒内收到的回复,并在屏幕上显示计数。
但我必须在单个文件中实现它。对于接收部分,我附上了一段代码
#define EXAMPLE_PORT 6000
#define EXAMPLE_GROUP "239.0.0.1"
####
sockrecv = socket(AF_INET, SOCK_DGRAM, 0);
if (sockrecv < 0) {
perror("socket send");
exit(1);
}
bzero((char *)&addrrecv, sizeof(addrrecv));
addrrecv.sin_family = AF_INET;
addrrecv.sin_addr.s_addr = htonl(INADDR_ANY);
addrrecv.sin_port = htons(EXAMPLE_PORT);
addrlenrecv = sizeof(addrrecv);
if (bind(sockrecv, (struct sockaddr *) &addrrecv, sizeof(addrrecv)) < 0) {
perror("bind");
exit(1);
}
mreq.imr_multiaddr.s_addr = inet_addr(EXAMPLE_GROUP);
mreq.imr_interface.s_addr = htonl(INADDR_ANY);
if (setsockopt(sockrecv, IPPROTO_IP, IP_ADD_MEMBERSHIP,
&mreq, sizeof(mreq)) < 0) {
perror("setsockopt mreq");
exit(1);
}
问题是要测试它,我必须在我的系统上运行多个副本。第一次程序运行良好
但在第二次执行时,bind() 调用会给出错误,因为套接字已附加到该端口号。
但如果程序必须从组接收消息,它会将套接字绑定(bind)到特定的 ip 和端口号。
那么我如何在单个系统上测试它......???
最佳答案
您的程序中只有一个实例可以绑定(bind)
到EXAMPLE_PORT。当您的第一个实例正在运行时,您无法启动另一个实例,因为它会尝试绑定(bind)到已在使用中的EXAMPLE_PORT。因此您会看到绑定(bind)错误。
客户端不需要绑定(bind)
。您创建一个套接字并执行 sendto
和 recvfrom
您可以创建客户端的多个实例。这里没有问题。 (当然创建socket
的数量是有限制的)
服务器需要绑定(bind)
。在一个系统中,您只能将 UDP 程序的一个实例绑定(bind)到一个特定端口上运行。
关于c - 多播发送器/接收器程序中的bind()错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29961440/
我是一名优秀的程序员,十分优秀!