C#网络发现(检测运行certian客户端的机器)
我正在启动通过本地网络共享文件的C#程序,它应该可以列出本地网络上使用相同程序的所有用户 我正在使用UDP广播来宣布网络中存在用户,似乎出现了问题。当我运行listener,然后从同一台计算机进行广播时,我确实得到了响应。但当我试图从同一子网上的其他设备发送广播时,我一无所获 这是我的广播发送课:C#网络发现(检测运行certian客户端的机器),c#,sockets,udp,broadcast,discovery,C#,Sockets,Udp,Broadcast,Discovery,我正在启动通过本地网络共享文件的C#程序,它应该可以列出本地网络上使用相同程序的所有用户 我正在使用UDP广播来宣布网络中存在用户,似乎出现了问题。当我运行listener,然后从同一台计算机进行广播时,我确实得到了响应。但当我试图从同一子网上的其他设备发送广播时,我一无所获 这是我的广播发送课: public class BroadcastHelper { private int portNo; private Socket brSock; private IPEndP
public class BroadcastHelper
{
private int portNo;
private Socket brSock;
private IPEndPoint brEp;
public BroadcastHelper(int _portNo = 8888)
{
this.portNo = _portNo;
this.brSock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
this.brSock.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);
this.brEp = new IPEndPoint(IPAddress.Broadcast, portNo);
}
public void SendBroadcast(string message)
{
byte[] buf = Encoding.ASCII.GetBytes(message);
brSock.SendTo(buf, this.brEp);
}
}
这是我的侦听器代码:
byte[] buf = new byte[1024];
var socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
var iep = new IPEndPoint(IPAddress.Any, 8888);
socket.Bind(iep);
var ep = iep as EndPoint;
socket.ReceiveFrom(buf, ref ep);
string msg = Encoding.ASCII.GetString(buf);
Console.WriteLine("Incoming message: " + msg);
有人能告诉我问题出在哪里吗?是我必须设置一些额外的SocketOptions,还是我应该使用完全不同的技术来实现这一发现
你尝试过多播吗?在我看来,网络设备不太喜欢广播。至于discovery,我们也来看看这个问题:在许多情况下,广播在网络上被明确屏蔽。例如,我的Linksys路由器在我购买它时默认阻止了所有UDP广播。@Maxwell Troy Milton King在读了一点关于多播的内容后,似乎这正是我想要的。非常感谢。