C# 使用UDP进行网络通信

这篇具有很好参考价值的文章主要介绍了C# 使用UDP进行网络通信。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

       在选择使用协议的时候,选择UDP必须要谨慎。在网络质量令人十分不满意的环境下,UDP协议数据包丢失会比较严重。但是由于UDP的特性:它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。比如我们聊天用的ICQ和QQ就是使用的UDP协议。

服务端代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
using System.Threading;


namespace UDP服务器
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            CheckForIllegalCrossThreadCalls = false;
            InitializeComponent();
            textBox1.Text = "127.0.0.1";
            textBox2.Text = "8401";
        }
        /// <summary>
        /// 获取本地IP
        /// </summary>
        private void label1_Click(object sender, EventArgs e)
        {
            string ip = IPAddress.Any.ToString();
            textBox1.Text = ip;
        }

        Socket server;
        private void button2_Click(object sender, EventArgs e)
        {

            server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            server.Bind(new IPEndPoint(IPAddress.Parse(textBox1.Text), int.Parse(textBox2.Text)));//绑定端口号和IP
            //server.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, true);
            listBox1.Items.Add("服务器已经成功开启!");
            //开启接收消息线程
            Thread t = new Thread(ReciveMsg);
            t.IsBackground = true;
            t.Start();
        }
        /// <summary>
        /// 向特定ip的主机的端口发送数据
        /// </summary>te
        void SendMsg()
        {
            EndPoint point = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8400);    //向指定的IP和端口发送消息
            string msg = textBox3.Text;
            server.SendTo(Encoding.UTF8.GetBytes(msg), point);
        }


        /// <summary>
        /// 接收发送给本机ip对应端口号的数据
        /// </summary>
        void ReciveMsg()
        {
            while (true)
            {
                EndPoint point = new IPEndPoint(IPAddress.Any, 0);//用来保存发送方的ip和端口号
                byte[] buffer = new byte[1024 * 1024];
                int length = server.ReceiveFrom(buffer, ref point);//接收数据报
                string message = Encoding.UTF8.GetString(buffer, 0, length);
                listBox1.Items.Add(point.ToString() + ":" + message);
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (textBox3.Text != "")
            {
                //开启发送消息线程
                Thread t3 = new Thread(SendMsg);
                t3.Start();
                listBox1.Items.Add(textBox1.Text + ":" + textBox2.Text + ":" + textBox3.Text);
            }


        }


    }
}

客户端代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net.Sockets;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;

namespace UDP客户端
{
    public partial class Form1 : Form
    {

        public Form1()
        {
            CheckForIllegalCrossThreadCalls = false;
            InitializeComponent();
            textBox1.Text = "127.0.0.1";
            textBox2.Text = "8400";
        }
        /// <summary>
        /// 创建客户端
        /// </summary>
        Socket client;

        private void button2_Click(object sender, EventArgs e)
        {
            
           

            ///创建客户端
            client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            client.Bind(new IPEndPoint(IPAddress.Parse(textBox1.Text), int.Parse(textBox2.Text)));
            ///线程问题
            Thread thread = new Thread(ReciveMsg);
            thread.IsBackground = true;
            thread.Start(client);
            listBox1.Items.Add("客户端已成功开启!");
        }

        /// <summary>
        /// 向特定ip的主机的端口发送数据
        /// </summary>
        void SendMsg()
        {
            EndPoint point = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8401);    //向指定的IP和端口发送消息
            ///发送内容
            string msg = textBox3.Text;
            ///将数据发送到指定的ip的主机的端口
            client.SendTo(Encoding.UTF8.GetBytes(msg), point);
        }
        /// <summary>
        /// 接收发送给本机ip对应端口号的数据
        /// </summary>
        void ReciveMsg(object o)
        {

            while (true)
            {
                try
                {
                    ///用来保存发送方的ip和端口号
                    EndPoint point = new IPEndPoint(IPAddress.Any, 0);
                    //MessageBox.Show(point.ToString());
                    ///定义客户端接收到的信息大小
                    byte[] buffer = new byte[1024 * 1024];
                    ///接收到的信息大小(所占字节数)
                    int length = client.ReceiveFrom(buffer, ref point);
                    string message = Encoding.UTF8.GetString(buffer, 0, length);
                    listBox1.Items.Add(point.ToString() + ":" + message);
                }
                catch (Exception)
                {
                    client.Close();
                }

            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (textBox3.Text != "")
            {
                //开启发送消息线程
                Thread t2 = new Thread(SendMsg);
                t2.Start();
                listBox1.Items.Add(textBox1.Text + ":" + textBox2.Text + ":" + textBox3.Text);
            }

        }
    }
}

效果展示

c# udp,c#,udp,网络,c#,网络协议

代码下载地址:

链接:https://pan.baidu.com/s/1r-V80I5fJ-8noF8YgMOlLA 
提取码:qx3s文章来源地址https://www.toymoban.com/news/detail-525583.html

到了这里,关于C# 使用UDP进行网络通信的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java网络编程之IP,端口号,通信协议(UDP,TCP)

    ① C/S :客户端/服务器 在用户本地需要下载安装客户端程序,在远程有一个服务器端程序。 优点:画面精美,用户体验好 缺点:用户需要下载更新 ② B/S :浏览器/服务器 只需要一个浏览器,用户通过指定网址访问对应的服务器。 优点:不需要开发客户端,只需要页面+服务

    2024年02月03日
    浏览(78)
  • 【网络通信】探索UDP与TCP协议、IP地址和端口号的奥妙

    🌺 个人主页: Dawn黎明开始 🎀 系列专栏: 网络奇幻之旅 ⭐ 每日一句:往前走,朝着光 📢 欢迎大家:关注 🔍 +点赞 👍 +评论📝+收藏⭐️ 文章目录 📋前言 一.网络通信 1.1网络通信协议 1.2TCP/IP协议中的四个层次 二.UDP协议 2.1定义 2.2UDP连接的交互过程 三.TCP协议 3.1定义

    2024年02月05日
    浏览(47)
  • SCTP, TCP, UDP, IP, ICMP都在哪一层?(TCP/IP网络通信协议学习)

    TCP/IP网络通信协议最早是由 罗伯特·卡恩 (Robert E. Kahn)和 文顿·瑟夫 (Vinton G. Cerf)于1972年提出的,它是一个实际的协议栈。 OSI七层网络通信协议最早是 由国际标准化组织 (ISO)于1977年提出的,它是一个理论模型。TCP/IP网络通信协议由于其简单性和实用性,成为 事实上

    2024年01月22日
    浏览(68)
  • 使用 python socket 实现UDP/TCP网络通信

    目录 目录 1.socket简介 2.创建socket 2.1创建UDPSocket 2.2创建TCPSocket 3.使用UDPSocket发送数据并接收 4.使用UDPSocket发送广播 5.UDPSocket聊天器 (多线程实现消息的收发功能) 6.使用TCPSocket建立客户端 7.使用TCPSocket建立服务端        socket(简称:套接字),是支持TCP和UDP(网络传输方式

    2023年04月10日
    浏览(62)
  • 树莓派学习:建立socket进行网络通信+tcp+udp+端口+字节序+socketAPI+地址转换API+聊天对话框实战

    目录 socket套接字网络通信学习 数据协议 tcp udp ip地址 端口 字节序 步骤  API介绍 地址转换API 实战  聊天对话框 服务器  运行时后面要传IP地址和端口 客户端   运行时后面要传IP地址和端口 socket是网络通信,通信的数据协议有http、tcp、udp等等,简单来说就是传输数据的格式

    2024年02月05日
    浏览(52)
  • 【网络原理】使用Java基于UDP实现简单客户端与服务器通信

    我们用Java实现UDP数据报套接字编程,需要借用以下API来实现 网络编程, 本质上是要操作网卡. 但是网卡不方便直接操作. 在操作系统内核中, 使用了一种特殊的叫做 “socket” 这样的文件来抽象表示网卡. 因此进行网络通信, 势必需要先有一个 socket 对象. DatagramSocket 是UDP Socket,

    2024年03月11日
    浏览(58)
  • QT网络通信-TCP、UDP通信

    时间记录:2024/1/17 pro文件添加模块network (1)创建TCP服务器对象 QTcpServer (2)为 QTcpServer 对象的 newConnection 信号绑定槽,用来监听TCP客户端的新连接,有新的客户端连接便会触发此信号 (3)使用 nextPendingConnection 方法获取连接的Tcp客户端对象 QTcpSocket (4)为 QTcpSocket 的 r

    2024年01月18日
    浏览(55)
  • Unity实现网络通信(UDP)

    UDP通信特点:         无连接,多对多         不可靠         面向数据报         效率高 UDP中的分包与黏包 分包:一段数据被分为两段或多段传输,在UDP通信方式中,因为UDP的不可靠性无法保证有序传输,因此尽量避免UDP自动分包。         其中一种方式是保证消

    2024年02月04日
    浏览(40)
  • C#和西门子PLC使用Udp通信

    目录 一、PLC程序工程创建 1、硬件配置 2、程序编程 3、添加监控表 二、C#程序工程创建 1、界面UI 2、代码编写 (1)创建本地Udp (2)读PLC的线程函数 (3)定时器 (4)上位机写寄存器操作 (5)StringToByte()方法封装 (6)窗口关闭 3、C#和PLC测试 (1)C#上位机写操作1 (2)C#上位

    2024年02月04日
    浏览(41)
  • MFC网络通信-Udp服务端

    目录 1、UI的布局 2、代码的实现: (1)、自定义的子类CServerSocket (2)、重写OnReceive事件 (3)、在CUdpServerDlg类中处理 (4)、在OnInitDialog函数中 (5)、实现自定义函数ProcessPendingRead()处理接收到的数据 (6)、加入新客户的消息先进性判断是否位enter (7)、加入的新消息

    2024年02月05日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包