我目前正在修改Dennis Bush的UFTP (http://uftp-multicast.sourceforge.net) 以符合我的需求。我目前想要做的是将客户端发送完整信息的地址更改为组播地址。我希望我修改过的UFTP客户端可以组播完整信息,而不是将其单播回服务器,因为我需要多播组中的每个客户端都能够看到发送的完整信息,而不仅仅是服务器。
UFTP的作者告诉我应该修改 client_transfer.c, line 359, nb_sendto() 函数调用的第五个参数 为一个包含我希望发送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);
对我来说,这个错误相当模糊。它确切地意味着什么?可能会导致这种错误的原因是什么?有人能指引我正确的方向吗?