UDP 没有像TCP那样的严密性, 发送前不需要进行握手和tongxi, 就类似村口的大喇叭,你听到没,发送者不知道
UDP 适合做广播
服务器:
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Threading;
namespace ConsoleApp1
{
class Program
{
static UdpClient udp = new UdpClient();
static void Main(string[] args)
{
udp.Connect("127.0.0.1", 888);
while (true)
{
Thread thread = new Thread(() =>{
while (true)
{
try
{
Byte[] sendByte = Encoding.Default.GetBytes(DateTime.Now.ToLongDateString()+ "节目预报,八点有大型晚会");
Console.WriteLine(DateTime.Now.ToLongDateString()+"节目预报,八点有大型晚会");
udp.Send(sendByte,sendByte.Length);
Thread.Sleep(2000);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
});
thread.Start();
}
}
}
}
因为一直创建线程,我的电脑在创建线程到3081个的时候报内存溢出
报错如图:
客户端:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Threading;
namespace Client
{
class Program
{
static void Main(string[] args)
{
UdpClient udp =new UdpClient(888);
IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Any, 888);
Thread thread = new Thread(() => {
while (true)
{
try
{
if (udp.Available < 0) continue;
if (udp.Client == null) return;
byte[] bytes = udp.Receive(ref ipEndPoint);
var resStr = Encoding.Default.GetString(bytes);
Console.WriteLine(resStr);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Thread.Sleep(2000);
}
});
thread.Start();
}
}
}
服务器页面:
客户端页面: