C#广播是UDP消息,监听多个回复
C# Broadcast is UDP message, listen for multiple replies
我正在尝试编写一些执行 UDP 广播的代码,然后收听来自远程服务器的回复,说它们存在。它用于识别机器 运行 子网上的服务器应用程序,因此基本上发送 "who's there?" 并监听所有回复。
我在 Java 中有这个(完美运行),它将 DatagramPacket 广播发送到组地址 224.168.101.200。然后有一个工作线程不断侦听进入同一套接字的传入 DatagramPackets。
This and this 不是答案,因为他们说如何在不同的机器上发送和收听。
刚刚给你做了一个工作示例,你可以比较哪里出了问题。我创建了一个带有 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));
}
}
我正在尝试编写一些执行 UDP 广播的代码,然后收听来自远程服务器的回复,说它们存在。它用于识别机器 运行 子网上的服务器应用程序,因此基本上发送 "who's there?" 并监听所有回复。
我在 Java 中有这个(完美运行),它将 DatagramPacket 广播发送到组地址 224.168.101.200。然后有一个工作线程不断侦听进入同一套接字的传入 DatagramPackets。
This and this 不是答案,因为他们说如何在不同的机器上发送和收听。
刚刚给你做了一个工作示例,你可以比较哪里出了问题。我创建了一个带有 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));
}
}