C#UDP Multicast在几秒钟后断开连接

时间:2009-08-28 03:13:40

标签: c# sockets udp multicast

我有一些网络代码连接到多播地址,但几秒后断开连接。任何人都可以弄清楚这段代码有什么问题吗?

String Target_IP = "224.1.2.3"; 
int Target_Port = 31337;

IPEndPoint LocalEP = new IPEndPoint(IPAddress.Any, Target_Port);
IPEndPoint RemoteEP = new IPEndPoint(IPAddress.Parse(Target_IP), Target_Port); 

using (Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))
{
    s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, true);
    //s.SetSocketOption(SocketOptionLevel.Udp, SocketOptionName.NoDelay, 1);
    //s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);
    s.Bind(LocalEP);
    s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 0);
    s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(IPAddress.Parse(Target_IP)));
    s.Connect(RemoteEP);

    // TODO
}

调用Connect()函数后,它报告为已连接,但等待一两秒后它将断开连接。我绑定到错误的端口还是什么?每个在线教程似乎都采用不同的方式。

1 个答案:

答案 0 :(得分:2)

由于您使用的是UDP,因此无法“连接”到远程目标。无连接协议上的Connect方法不是这样连接的,而是充当它将接受来自哪些目标的过滤器。

当你说你几秒钟后断开连接时,你是如何确定的?如果您正在检查套接字上的连接状态,那么您做错了。相反,你应该只是开始接收,并且告诉远程套接字“可能”已经丢失的唯一方法是,如果你得到一个0字节的数据包,或者你得到一个ICMP响应。