C#实现UDP通信方式
作者:一介学徒
文章介绍了如何使用C#实现UDP通信,包括UDP服务器和客户端的实现步骤和示例代码,服务器关键类为UdpClient和IPEndPoint,实例化对象后可以通过异步任务发送数据并接收数据,客户端同样使用UdpClient和IPEndPoint,连接到远程服务器后开新任务接收数据
C#实现UDP通信
一、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; } } } }
三、最终效果
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。