UDP发送端指令源代码:

class Program
{
private static Socket sock;
private static IPEndPoint iep1;
private static byte[] data;
static void Main(string[] args)
{
string hostName = Dns.GetHostName();//获取本机名
IPHostEntry localhost = Dns.GetHostByName(hostName);//获取本机IPv4的地址
IPAddress localaddr = localhost.AddressList[0];//本机IP地址

//对IP地址进行操作,最后一位拼接为255,做为广播IP地址
string strNowIP = localaddr.ToString();
string[] strNowIPs = strNowIP.Split('.');
string strNewIP = strNowIPs[0] + "." + strNowIPs[1] + "." + strNowIPs[2] + ".255";

sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
//iep1 = new IPEndPoint(IPAddress.Broadcast, 9050);//这个是自带的广播地址,但是地址为255.255.255.255,不能用,屏蔽掉

//生成广播地址和端口号,端口号为9050
iep1 = new IPEndPoint(IPAddress.Parse(strNewIP), 9050);
Console.WriteLine("正式广播地址:" + iep1.Address.ToString() + " 广播端口号:9050");

Console.Write("请输入指令,回车进行发送:");
string content = Console.ReadLine();
Console.WriteLine(content);

if (!string.IsNullOrEmpty(content))
{
string hostname = content;// Dns.GetHostName();
data = Encoding.ASCII.GetBytes(hostname);
sock.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);

//开启一个线程,因为此处广播的需求是一直发送消息,所以为了避免卡死现象,开启线程,BroadcastMessage方法中while循环一直发送指令
Thread t = new Thread(BroadcastMessage);
t.Start();
Console.WriteLine("指令持续发送中....");
}
else
{
Console.WriteLine("发送指令为空,发送失败,请重新启动发送程序,回车结束");
}

Console.ReadKey();
}
/// <summary>
/// 线程
/// </summary>
private static void BroadcastMessage()
{
while (true)
{
//线程中,死循环不间断的发送指令
sock.SendTo(data, iep1);
Thread.Sleep(500);
}
}
}


UDP任务指令接收设置(以ESP8266为例):
1、设置STA模式:AT+CWMODE=1
2、将通信模块加入热点:AT+CWJAP="GXDS2019","xnsq2019";(竞赛WiFi的SSID为"GXDS2019",密码为"xnsq2019");
3、开启单路连接:AT+CIPMUX=0
4、作为客户端模式加入指定IP的UDP或者广播域:AT+CIPSTART="UDP","192.168.3.50",9050,9050,2;(IP地址为比赛公布地址,9050表示目标UDP端口,9050表示本地端口,2表示远端可变)。