一、UDP服务器
1、关键类: UdpClient、IPEndPoint;
2、实例化一个UdpClient对象;
3、使用IPEndPoint建立与远程对象的连接;
4、开一个异步新任务发送数据;
5、主进程接收数据;
示例代码:
public static void Main()
{
UdpClient client = new UdpClient(8889);
CancellationTokenSource cts = new CancellationTokenSource();
IPEndPoint remotePoint = new IPEndPoint(IPAddress.Any, 0);
Task.Factory.StartNew(() =>
{
while (!cts.IsCancellationRequested)
{
string? sendMessage = Console.ReadLine();
if (sendMessage != null)
{
byte[] data = Encoding.Default.GetBytes(sendMessage);
client.Send(data, remotePoint);
}
}
}, cts.Token);
while (true)
{
byte[] recvdata = client.Receive(ref remotePoint);
if (recvdata != null)
{
string recvMessage = Encoding.UTF8.GetString(recvdata);
if (recvMessage == "quit")
{
cts.Cancel();
client.Close();
return;
}
StringBuilder sb = new StringBuilder("客户端:");
sb.Append(recvMessage);
Console.WriteLine(sb);
}
}
}
二、UDP客户端
1、关键类: UdpClient、IPEndPoint;
2、实例化一个UdpClient对象;
3、使用IPEndPoint建立与远程服务器的连接;
4、开新任务接收数据;
5、主进程发送数据;
示例代码:
public static void Main()
{
UdpClient client = new UdpClient(8888);
IPAddress remoteIp = IPAddress.Parse("127.0.0.1");
int remotePort = 8889;
IPEndPoint? remoteEndPoint = new IPEndPoint(remoteIp, remotePort);
CancellationTokenSource cts = new CancellationTokenSource();
Task.Factory.StartNew(() =>
{
while (!cts.IsCancellationRequested)
{
try
{
byte[] data = client.Receive(ref remoteEndPoint);
if (data != null)
{
StringBuilder sb = new StringBuilder("服务器:");
sb.Append(Encoding.UTF8.GetString(data));
Console.WriteLine(sb);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
break ;
}
}
}, cts.Token);
while (true)
{
string? sendMessage = Console.ReadLine();
if (sendMessage != null)
{
byte[] data = Encoding.Default.GetBytes(sendMessage);
client.Send(data, remoteEndPoint);
if (sendMessage == "quit")
{
cts.Cancel();
client.Close();
return;
}
}
}
}
三、最终效果