我有一些连接到多播地址但在几秒钟后断开连接的网络代码。任何人都可以找出这段代码有什么问题吗?
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/