可能只能传入广播地址,如:
169.254.201.255 (C类子网)
169.254.255.255 (B类子网)
169.255.255.255 (A类子网)
255.255.255.255 (全网)下面是msdn的示例:UdpClient udpClient = new UdpClient();
// Creates an IPAddress to use to join and drop the multicast group.
IPAddress multicastIpAddress = IPAddress.Parse("239.255.255.255");try{
// The packet dies after 50 router hops.
udpClient.JoinMulticastGroup(multicastIpAddress, 50);
}
catch ( Exception e ){
Console.WriteLine( e.ToString());
}
169.254.201.255 (C类子网)
169.254.255.255 (B类子网)
169.255.255.255 (A类子网)
255.255.255.255 (全网)下面是msdn的示例:UdpClient udpClient = new UdpClient();
// Creates an IPAddress to use to join and drop the multicast group.
IPAddress multicastIpAddress = IPAddress.Parse("239.255.255.255");try{
// The packet dies after 50 router hops.
udpClient.JoinMulticastGroup(multicastIpAddress, 50);
}
catch ( Exception e ){
Console.WriteLine( e.ToString());
}
表示参数无效
ms-help://MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfsystemnetsocketsudpclientclassjoinmulticastgrouptopic1.htm
如果你只是要和一台主机通讯,又何必用多播?直接UdpClient.Connect(host)不就可以了?
多播应该是用来在子网中群发消息用的,可以同时将消息发送到子网中的所有主机。
当然你可以只让关心这个消息的主机监听这个消息。
而listener.Connect()则是连接到单个一个地址,是无法广播的。所以可能你对这些网络协议了解的不是很清楚
当然,其实子网中所有消息都是以广播形式发送的。消息会到达子网中的每一台主机。
但是因为数据包的头包含接受方的MAC地址,所以通常每台主机只处理与自己的MAC匹配的消息。
当MAC地址不匹配时,网卡只是简单的将数据包丢弃,而不向更高层传递。当然你可以通过控制网卡来改变这种行为,这就是“嗅探器”软件的理论基础。而当接受方的IP地址设置为以.255结尾时,每台主机都会接受此消息,并将之向高层传递。
这样就好像是向子网中的每一台主机都发送了一个相同的数据包,就像“广播”一样。既然你的代码中的通讯对象很明确,只有一台主机,就不要用什么“广播”了,
直接listener.Connect(host)就OK了。
你第一个方法的地址应该会发给一个很小的子网,对吗?
第二个方法我比较赞同,虽然没有用过UDP连接单台机器