我目前正在修改 Dennis Bush 的 UFTP ( http://uftp-multicast.sourceforge.net ) 以满足我的需要。我目前正在尝试做的是更改客户端发送 COMPLETE 消息的地址。我希望我的 UFTP 修改版本的客户端多播 COMPLETE 消息,而不是将其单播回服务器,因为我需要多播组中的每个客户端都能够看到发送的 COMPLETE 消息,而不仅仅是服务器。
UFTP 的作者告诉我,我应该修改client_transfer.c,第 359 行,nb_sendto() 函数调用,第 5 个参数到一个包含私有多播地址和我希望将 COMPLETES 发送到的端口的结构。不幸的是,我收到“协议不支持地址系列”错误。代码部分原本是这样的:
if (nb_sendto(listener, outpacket, payloadlen, 0,
(struct sockaddr *)&group_list[listidx].replyaddr,
sizeof(struct sockaddr_in)) == SOCKET_ERROR) {
sockerror(group_list[listidx].group_id, group_list[listidx].file_id,
"Error sending COMPLETE");
} else {
log(group_list[listidx].group_id, group_list[listidx].file_id,
"COMPLETE sent");
}
set_timeout(listidx);
free(buf);
free(encrypted);
我当前的代码如下所示:
if (nb_sendto(listener, outpacket, payloadlen, 0,
////modified line:
(struct in_addr *)&group_list[listidx].multi.s_addr, //struct in_addr multi;
////end of modified line
sizeof(struct sockaddr_in)) == SOCKET_ERROR) {
sockerror(group_list[listidx].group_id, group_list[listidx].file_id,
"Error sending COMPLETE");
} else {
log(group_list[listidx].group_id, group_list[listidx].file_id,
"COMPLETE sent");
}
set_timeout(listidx);
free(buf);
free(encrypted);
对我来说,这个错误非常模糊。它到底是什么意思?这种错误的可能原因是什么?有人能指出我正确的方向吗?