C#實(shí)現(xiàn)UDP通信方式
更新時(shí)間:2025年01月07日 16:47:12 作者:一介學(xué)徒
文章介紹了如何使用C#實(shí)現(xiàn)UDP通信,包括UDP服務(wù)器和客戶端的實(shí)現(xiàn)步驟和示例代碼,服務(wù)器關(guān)鍵類為UdpClient和IPEndPoint,實(shí)例化對(duì)象后可以通過異步任務(wù)發(fā)送數(shù)據(jù)并接收數(shù)據(jù),客戶端同樣使用UdpClient和IPEndPoint,連接到遠(yuǎn)程服務(wù)器后開新任務(wù)接收數(shù)據(jù)
C#實(shí)現(xiàn)UDP通信
一、UDP服務(wù)器
- 1、關(guān)鍵類: UdpClient、IPEndPoint;
- 2、實(shí)例化一個(gè)UdpClient對(duì)象;
- 3、使用IPEndPoint建立與遠(yuǎn)程對(duì)象的連接;
- 4、開一個(gè)異步新任務(wù)發(fā)送數(shù)據(jù);
- 5、主進(jìn)程接收數(shù)據(jù);
示例代碼:
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、關(guān)鍵類: UdpClient、IPEndPoint;
- 2、實(shí)例化一個(gè)UdpClient對(duì)象;
- 3、使用IPEndPoint建立與遠(yuǎn)程服務(wù)器的連接;
- 4、開新任務(wù)接收數(shù)據(jù);
- 5、主進(jìn)程發(fā)送數(shù)據(jù);
示例代碼:
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("服務(wù)器:");
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;
}
}
}
}三、最終效果

總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
C# 委托的三種調(diào)用示例(同步調(diào)用 異步調(diào)用 異步回調(diào))
本文將主要通過同步調(diào)用、異步調(diào)用、異步回調(diào)三個(gè)示例來講解在用委托執(zhí)行同一個(gè)加法類的時(shí)候的的區(qū)別和利弊2013-12-12
C#?使用SpecFlow創(chuàng)建BDD測(cè)試用例的示例代碼
這篇文章主要介紹了C#?使用SpecFlow創(chuàng)建BDD測(cè)試用例,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06
關(guān)于C#泛型列表List<T>的基本用法總結(jié)
本篇文章主要是對(duì)C#中泛型列表List<T>的基本用法進(jìn)行了詳細(xì)的總結(jié)介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助2014-01-01
Unity實(shí)現(xiàn)模型點(diǎn)擊事件的方法
這篇文章主要介紹了Unity實(shí)現(xiàn)模型點(diǎn)擊事件的方法,本文通過多種方法給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-05-05
C#實(shí)現(xiàn)NPOI的Excel導(dǎo)出詳解
這篇文章主要介紹了C#實(shí)現(xiàn)NPOI的Excel導(dǎo)出的示例代碼,文中的實(shí)現(xiàn)過程講解詳細(xì),對(duì)我們的學(xué)習(xí)或工作有一定的幫助,感興趣的可以跟隨小編一起學(xué)習(xí)一下2022-01-01
C# 使用Microsoft Edge WebView2的相關(guān)總結(jié)
這篇文章主要介紹了C# 使用Microsoft Edge WebView2的相關(guān)總結(jié),幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下2021-02-02

