C#广播是UDP消息,监听多个回复

标签 c# udp broadcast udpclient

我正在尝试编写一些执行 UDP 广播的代码,然后收听来自远程服务器的回复,说它们存在。它用于识别在子网上运行服务器应用程序的机器,因此基本上会发出“谁在那里?”并监听所有回复。

我在 Java 中有这个(完美运行),它将 DatagramPacket 广播发送到组地址 224.168.101.200。然后有一个工作线程不断监听来自同一套接字的传入 DatagramPackets。

Thisthis不是答案,因为他们说如何在不同的机器上发送和收听。

最佳答案

刚刚给你做了一个工作示例,你可以比较哪里出了问题。我创建了一个带有 2 个文本框和一个按钮的 Windows 窗体应用程序。

public partial class Form1 : Form
{
    private int _port = 28000;

    private string _multicastGroupAddress = "239.1.1.1";

    private UdpClient _sender;
    private UdpClient _receiver;

    private Thread _receiveThread;

    private void UpdateMessages(IPEndPoint sender, string message)
    {
        textBox1.Text += $"{sender} | {message}\r\n";
    }

    public Form1()
    {
        InitializeComponent();

        _receiver = new UdpClient();
        _receiver.JoinMulticastGroup(IPAddress.Parse(_multicastGroupAddress));
        _receiver.Client.Bind(new IPEndPoint(IPAddress.Any, _port));

        _receiveThread = new Thread(() =>
        {
            while (true)
            {
                IPEndPoint sentBy = new IPEndPoint(IPAddress.Any, _port);
                var dataGram = _receiver.Receive(ref sentBy);

                textBox1.BeginInvoke(
                    new Action<IPEndPoint, string>(UpdateMessages), 
                    sentBy, 
                    Encoding.UTF8.GetString(dataGram));
            }
        });
        _receiveThread.IsBackground = true;
        _receiveThread.Start();


        _sender = new UdpClient();
        _sender.JoinMulticastGroup(IPAddress.Parse(_multicastGroupAddress));
    }

    private void button1_Click(object sender, EventArgs e)
    {
        var data = Encoding.UTF8.GetBytes(textBox2.Text);
        _sender.Send(data, data.Length, new IPEndPoint(IPAddress.Broadcast, _port));
    }
}

关于C#广播是UDP消息,监听多个回复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43103714/

相关文章:

c# - 无法将 JSON 数组反序列化为类型 - Json.NET

c# - 将字符串加密为固定长度

python - 使用 Twisted Python 的 UDP 客户端和服务器

android intent startActivity() 和 sendBroadcast()

c# - 如何在 imagebutton 中显示来自 URL 的图像 - xamarin Android

c# - Azure Functions - 无法加载文件或程序集 '' AzureFunctions.Autofac.Shared'

python - 通过 UDP 数据包发送字节,无需进一步转换

java - 如何同时运行这两个循环? ( java )

java - 卡夫卡广播。如果组中唯一的消费者出现故障,如何知道消费者组的读取偏移量

c - 使用多个 NIC 广播 UDP 数据包