几秒钟后 C# UDP 多播断开连接

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

最佳答案

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

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

关于几秒钟后 C# UDP 多播断开连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1344853/

相关文章:

javascript - FFMPEG UDP 输出不起作用

networking - 选择多播 IP 地址

c# - 获取通用类的属性

c# - 在 Visual Studio 中组织 C# 使用的键盘快捷键是什么?

node.js - 更改前关闭 RethinkDB 更改源

c++ - Windows 注册 I/O Win 8.1 RioCreateRequestQueue 错误 10045

C# 手动锁定/解锁

c# - 帮助理解 C# 和多线程

Node.js TCP 套接字在轮询前等待几秒钟? (net.createServer)

c - 使用 sscanf() 解析 Json 消息