C# UDP网络通信的实现示例

 更新时间:2024年06月26日 09:48:06   作者:栗克  
UDP协议是互联网上使用最广泛的传输协议之一,具有简单、高效和不可靠的特点,本文主要介绍了C# UDP网络通信的实现示例,具有一定的参考价值,感兴趣的可以了解一下

TCP和UDP基本概念

TCP:(Transmission Control Protocol)是一种面向连接、可靠的、基于字节流的传输层通信协议。并且提供了全双工通信,允许俩个应用直接建立一个可靠的连接以进行数据交换/UDP:(User Datagram Protocol):是一种无连接、不可靠、基于数据报文传输层协议,它不提供数据包的分组。排序和组装功能也不提供可靠性的保证

TCP和UDP区别

1.TCP是基于连接 而udp基于非连接

2.tcp传输数据稳定可靠,适用于对网络通信质量要求高的场景,需要准确无误发给对方 例如 传输文件 发送邮件 浏览网页

3.udp优点是速度快,轻量级。但是有可能会产生丢包,所以适用于实时性要求较高的但是对丢包没有要求太高场景,例如 域名查询 语音通话 视频直播等

UDP协议特点

1.udp基于IP的简单的协议,不可靠的协议

2.优点就是简单 轻量化 传输速度高、要求可靠性不太高

3.缺点:没有流量控制,没有应答确认机制。不能解决丢包重发错顺序问题

UDP使用场景

当应用程序对传输的可靠性要求不高,但是对传输速度和延迟要求较高时可以使用udp协议。例如语音和视频聊天。主要在这些场景如果丢了一俩个数据包 不会产生太大的影响。

UDP服务器

控件

两个按钮(打开服务器按钮,发送消息按钮),输入框,文本框控件(RichTextBox:显示聊天)

打开服务器按钮方法

创建全局变量 Socket

 // 先讲socket进行客户端和服务器的书写
 Socket socket;
 private void button1_Click(object sender, EventArgs e)
 {
     //参数1 ip地址类型 ipv4的类型
     //参数2 传递数据类型 数据报文类型
     //参数3 协议类型 udp协议
     //1 创建socket套接字作为服务器对象
     socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
     // 2绑定ip和端口
     IPAddress iPAddress = IPAddress.Parse("192.168.107.83");
     socket.Bind(new IPEndPoint(iPAddress,8081));
     //3 接受消息
     startReceive();
 }
    void startReceive()
  {
      //创建线程 开启线程
      new Thread(() =>
      {
          byte[] body = new byte[1024];
          while (true)
          {
              
              int count =   socket.Receive(body); //接受数据
              string s = Encoding.UTF8.GetString(body, 0, count);
              richTextBox1.Invoke((Action)(() =>
              {
                  richTextBox1.AppendText(s + "\t\n");
                  richTextBox1.SelectionStart=richTextBox1.Text.Length;
                  richTextBox1.ScrollToCaret();
              }));
          }

      }).Start() ;
  }    

发送消息事件

//发消息的方法 给指定的人发消息
string[] ips = new string[] {"192.168.107.83",  };
private void button2_Click(object sender, EventArgs e)
{
    socket.SendTo(Encoding.UTF8.GetBytes(this.textBox1.Text),
        new IPEndPoint(IPAddress.Parse("192.168.107.83"), 8082)
        );
}

UDP客户端

控件

三个按钮(打开,发送,关闭),RichTextBox(显示聊天)

        public Form1()
        {
            InitializeComponent();
            
        }
        void f1()
        {
            byte[] body = new byte[1024];
            while (true)
            {
                int count = socket.Receive(body); //接受数据
                string s = Encoding.UTF8.GetString(body, 0, count);
                richTextBox1.Invoke((Action)(() =>
                {
                    richTextBox1.AppendText(s + "\t\n");
                    richTextBox1.SelectionStart = richTextBox1.Text.Length;
                    richTextBox1.ScrollToCaret();
                }));
            }
        }
        // 打开连接
        Socket socket;
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                //1创建客户端对象
                socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
                //bind 如果前后端写的端口一致的时候 出现错误,端口号只能使用一次
                //2 绑定ip和端口号
               socket.Bind(new IPEndPoint(IPAddress.Parse("192.168.107.83"), 8082));
                Thread th = new Thread(f1);
                th.Start();
            }
            catch (Exception ex)
            {
                MessageBox.Show("端口号被占用");
            }

        }

        //发送消息
        private void button2_Click(object sender, EventArgs e)
        {
          
            if (socket != null)
            {
              
                //参数1 发送的字符串转成字节数组
                //参数2 发送数据的远程终端 new IPEndPoint(IPAddress.Parse("192.168.107.83"), 8081)
                socket.SendTo(Encoding.UTF8.GetBytes("倒反天罡"), new IPEndPoint(IPAddress.Parse("192.168.107.83"), 8081));
           }
        }

        //关闭
        private void button3_Click(object sender, EventArgs e)
        {
            socket.Close();//关闭
            socket = null;
        }

到此这篇关于C# UDP网络通信的实现示例的文章就介绍到这了,更多相关C# UDP网络通信内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • C#词法分析器之输入缓冲和代码定位的应用分析

    C#词法分析器之输入缓冲和代码定位的应用分析

    本篇文章介绍了,C#词法分析器之输入缓冲和代码定位的应用分析。需要的朋友参考下
    2013-05-05
  • 深入C# 内存管理以及优化的方法详解

    深入C# 内存管理以及优化的方法详解

    本篇文章是对C#中内存管理以及优化的方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C#使用Lazy实现延迟加载的方法示例

    C#使用Lazy实现延迟加载的方法示例

    在C#中,Lazy< T> 类是一个非常有用的工具,它可以用于延迟加载值,在本文中,我们将详细介绍 Lazy< T> 的实现机制和用法,并提供一些示例来展示它的优势,文中通过代码示例讲解的非常详细,需要的朋友可以参考下
    2024-06-06
  • C#使用命名管道Pipe进行进程通信实例详解

    C#使用命名管道Pipe进行进程通信实例详解

    这篇文章主要介绍了C#使用命名管道Pipe进行进程通信实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • 轻松学习C#的基础入门

    轻松学习C#的基础入门

    轻松学习C#的基础入门,了解C#最基本的知识点,C#是一种简洁的,类型安全的一种完全面向对象的开发语言,是Microsoft专门基于.NET Framework平台开发的而量身定做的高级程序设计语言,需要的朋友可以参考下
    2015-11-11
  • c#解压文件的实例方法

    c#解压文件的实例方法

    该方法适应应用桌面快捷键压缩的文件,zip,rar格式的文件进行解压!
    2013-05-05
  • C#笔记之EF Code First 数据模型 数据迁移

    C#笔记之EF Code First 数据模型 数据迁移

    EF 中 Code First 的数据迁移网上有很多资料,我这份并没什么特别。Code First 创建视图网上也有很多资料,但好像很麻烦,而且亲测好像是无效的方法(可能是我太笨,没搞成功),我摸索出了一种简单有效的方法,这里分享给大家
    2021-09-09
  • C#禁止textbox复制、粘贴、剪切及鼠标右键的方法

    C#禁止textbox复制、粘贴、剪切及鼠标右键的方法

    这篇文章主要介绍了C#禁止textbox复制、粘贴、剪切及鼠标右键的方法,涉及C#针对窗口消息的处理技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-09-09
  • C#实现获取系统目录并以Tree树叉显示的方法

    C#实现获取系统目录并以Tree树叉显示的方法

    这篇文章主要介绍了C#实现获取系统目录并以Tree树叉显示的方法,可以加深读者对于C#下数据结构实现方法的认识,需要的朋友可以参考下
    2014-07-07
  • C#根据前台传入实体名称实现动态查询数据

    C#根据前台传入实体名称实现动态查询数据

    这篇文章主要为大家详细介绍了C#如何根据前台传入实体名称实现动态查询数据的功能,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2023-04-04

最新评论