【问题标题】:How do I send data to multiple specific IP's如何将数据发送到多个特定 IP
【发布时间】:2019-12-09 13:14:29
【问题描述】:

我正在编写一个需要将相同数据发送给多个特定接收者的 C# 程序。我不能使用多播,因为这会将数据发送给所有监听多播地址的人。

我目前的解决方案是遍历收件人并将数据分别发送给每个收件人,但我正在寻找更有效的方法。

这是我目前的解决方案:

    public void SendToMultiple(IPAddress[] Recipients, byte[] Data)
    {
        UdpClient Client = new UdpClient();
        foreach(IPAddress Recipient in Recipients)
        {
            Client.Send(Data, Data.Length, new IPEndPoint(Recipient, PORT));
        }
        Client.Close();
    }

【问题讨论】:

  • 由于多播不存在,无论您做什么,最终都会通过您的网络接口串行发送数据。任何相对现代的机器都会很容易地使接口饱和(即客户端将在网络允许的情况下以最快的速度接收数据)。除非使用多个 NIC,否则其余的将是对您的循环进行微优化...顺便说一句,您如何确保客户端接收数据?还是只是一劳永逸:

标签: c# tcp udp ip multicast


【解决方案1】:

据我所知,您可以使用单播、多播或广播。 由于您只对发送给特定的一组客户端感兴趣,因此我只能推荐单播,因为其他两个将发送给那些也在收听的人。

为了提高效率,我唯一能想到的就是将代码放入一个 Parallel.Foreach 循环中,并在其中创建 UdpClient,然后将数据发送出去?

public void SendToMultiple(IPAddress[] Recipients, byte[] Data)
{
    Parallel.ForEach(Recipients,
        Recipient =>
        {
            UdpClient Client = new UdpClient();
            Client.Send(Data, Data.Length, new IPEndPoint(Recipient, PORT));
            Client.Close();
        });
}

【讨论】:

    猜你喜欢
    • 2014-10-27
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多