【问题标题】:Udpclient polling UDP multicast addressudpclient轮询UDP组播地址
【发布时间】:2012-12-11 11:47:09
【问题描述】:

我想检查 UDP 多播地址上的数据是否可用,我发现的唯一机制是 Poll 方法。

设置:

client = new UdpClient(localEp);
client.JoinMulticastGroup(multicastAddr, localIpAddress);
client.Connect(multicastAddr, receiveport);

投票:

if (!client.Client.Poll(100, SelectMode.SelectRead))

客户端已连接(我检查过)但从未返回 true。
在wireshark中我可以看到udp数据报被正确发送了。

修复建议?

编辑:

IPEndpoint localEp = 本地 ipv4 单播地址,多播 udps 的端口 receiveport = 接收多播的端口 多播地址=IP地址

【问题讨论】:

    标签: c# sockets udp multicast udpclient


    【解决方案1】:

    连接UDP socket是指接收时将数据报的源地址和端口限制为指定的对,发送时设置默认的目的地址和端口。

    移除对Connect()的调用。

    编辑0:

    您需要绑定到多播地址,而不是本地 IP。从构造函数中删除localEp,或者将其替换为多播组/端口对。在MSDN 上查看examples

    你错了,你可以Receive() 只用一个数据报。

    【讨论】:

    • 我已经尝试移除连接,或者一个一个加入。但是 poll 方法仍然总是返回 false
    • Receive-ing 怎么样?还有localEpmulticastAddrlocalIpAddressreceivePort 中的值是什么?
    • 问题是,微软为 c# 套接字设计。如果你开始接收,你不能在没有得到套接字异常的情况下停止接收。所以我尝试在开始接收过程之前轮询查看数据是否存在。
    • “你错了,你只能接收()一个数据报。”我什么都没说!
    • 让代码正常工作,似乎 client.Client.Connected 始终为 false,但 poll 方法不需要它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多