2

我有一些网络代码连接到多播地址,但几秒钟后断开连接。谁能弄清楚这段代码有什么问题?

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() 函数后,它报告为已连接,但等待一两秒钟,它就会断开连接。我绑定到错误的端口还是什么?每个在线教程似乎都以不同的方式进行。

4

1 回答 1

2

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

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

于 2009-08-28T03:25:42.117 回答