C#网络发现(检测运行certian客户端的机器)

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

我正在启动通过本地网络共享文件的C#程序,它应该可以列出本地网络上使用相同程序的所有用户

我正在使用UDP广播来宣布网络中存在用户,似乎出现了问题。当我运行listener,然后从同一台计算机进行广播时,我确实得到了响应。但当我试图从同一子网上的其他设备发送广播时,我一无所获

这是我的广播发送课:

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在读了一点关于多播的内容后,似乎这正是我想要的。非常感谢。