C#学习系列之UDP同端口发送与接收

C#学习系列之UDP同端口发送与接收


啰嗦

项目中需要同一端口的发送与接收,当时一直都没有在同一个程序中对同一个端口进行发送与接收的尝试。

采用的形式是定义两个UdpClient,对同一UDP端口进行收发与接收。结果导致总有一个线程会kill掉,无法使用。


解决方案

同一个端口的接收与发送,还是需要定义两个线程进行读写。

但是不需要同时定义两个UdpClient

当定义好一个UdpClient,直接使用。

代码

csharp 复制代码
UdpClient Client = null;

void RecvThread()
{
    if (Client == null)
    {
        Client = new UdpClient(iDataPort);
        Client.JoinMulticastGroup(IPAddress.Parse(iDataIP));
    }
    IPEndPoint multicast = new IPEndPoint(IPAddress.Parse(iDataIP), iDataPort);
    while (true)
    {
        byte[] buf = Client.Receive(ref multicast);
        Thread.Sleep(40);
    }
}

void SendThread()
{
     IPEndPoint multicast = new IPEndPoint(IPAddress.Parse(iDataIP), iDataPort);
     while (true)
     {
         byte[] buf;
         bool getBl = mySendData.TryDequeue(out buf);
         if (getBl)
         {
             if (buf != null)
             {
                 int isSend = Client.Send(buf, buf.Length, multicast);
             }
         }
         Thread.Sleep(40);
     }
}

这里有两个线程开辟,需要注意在收线程中将Client赋值了,所以发送线程中Client不会为null,所以一定要主要这个问题,否则会报错!


总结

通过实际项目又填补了自己对UDP同一个端口使用的了解。

相关推荐
码农4274 分钟前
点评项目深入改造-------日常学习笔记
java·笔记·学习·搜索引擎·全文检索
星河Cynthia20 分钟前
WPF基于resx资源文件的多语言实现
c#·wpf
量子物理学43 分钟前
WPF 标签预览可以显示图片运行后不显示
c#·wpf
云边散步1 小时前
godot2D游戏教程系列二(19)
笔记·学习·游戏·游戏开发
旺仔.2911 小时前
UDP 编程 详解
linux·网络·计算机网络·udp
我的xiaodoujiao1 小时前
4、API 接口自动化测试详细图文教程学习系列4--相关Python基础知识3
python·学习·测试工具·pytest
格林威1 小时前
工业相机图像采集处理:从 RAW 数据到 AI 可读图像,海康相机 C# 实战代码深度解析
开发语言·c++·人工智能·数码相机·c#·工业相机·堡盟相机
学机械的鱼鱼1 小时前
【学习笔记】如何快速理解ROS2
笔记·学习
red_redemption1 小时前
自由学习记录(145)
学习
醇氧1 小时前
【学习】封锁协议
网络·学习·oracle