我有一些网络代码连接到多播地址,但几秒后断开连接。任何人都可以弄清楚这段代码有什么问题吗?
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()函数后,它报告为已连接,但等待一两秒后它将断开连接。我绑定到错误的端口还是什么?每个在线教程似乎都采用不同的方式。
答案 0 :(得分:2)
由于您使用的是UDP,因此无法“连接”到远程目标。无连接协议上的Connect方法不是这样连接的,而是充当它将接受来自哪些目标的过滤器。
当你说你几秒钟后断开连接时,你是如何确定的?如果您正在检查套接字上的连接状态,那么您做错了。相反,你应该只是开始接收,并且告诉远程套接字“可能”已经丢失的唯一方法是,如果你得到一个0字节的数据包,或者你得到一个ICMP响应。