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

时间:2014-07-02 17:22:16

标签: c# sockets udp broadcast discovery

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

我使用UDP广播宣布用户在网络中的存在,好像有问题。当我运行监听器然后从同一台计算机进行广播时,我确实得到了响应。但是,当我尝试从同一子网上的其他设备发送广播时,我什么都没得到。

这是我的广播发送课程:

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,或者我应该使用绝对不同的技术来实现这个发现?

C#.NET 4.0

0 个答案:

没有答案