如何解决过滤来自特定IP的UDP数据包
| 我有一个程序可以使用pthreads同时传输(广播)和接收UDP数据包。我想要做的是删除我发送的数据包。我怎么做?我的接收代码当前如下所示:void *receive_thread_body(void *arg)
{
long msg = 0;
while(msg<500)
{
fd_set socket_set;
FD_ZERO(&socket_set);
FD_SET(b_sock,&socket_set);
struct timeval tm;
tm.tv_usec = 10;
tm.tv_sec = 0;
int ret = select(b_sock+1,&socket_set,&tm);
if(ret == -1)
{
std::cout<<\"select failed\";
}
if(FD_ISSET(b_sock,&socket_set) != 0)
{
int recvStringLen = recvfrom(b_sock,&msg,sizeof(msg),NULL,0);
if(recvStringLen < 0)
{
std::cout<<\"recvfrom failed\";
}
else
{
printf(\"\\t\\t\\tRX: %d\\n\",msg);
}
}
}
}
解决方法
您需要填写“ 1”呼叫的最后两个参数-这将是发送者的地址。
然后将其与您自己的地址列表进行匹配(例如,有关相关信息,请参见此处)。
此方法与发送方式无关-您可以在连接或无连接套接字上使用它,当然也可以在广播或多播(或单播)传输上使用它。
, 如果您正在谈论多播,请取消设置IP(V6)?_ MULTICAST_LOOP选项(默认情况下可能已启用)以不接收发送的内容。请注意,这将阻止同一主机上的其他应用程序接收您发送的内容。
int zero = 0;
err = setsockopt(fd,IPPROTO_IPV6,IPV6_MULTICAST_LOOP,&zero,sizeof zero);
我还没有听说过要播放的电视节目。但是广播太老了,以至于IPv6标准已将其替换为组播。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。