欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C# UDP網絡通信的實現示例

 更新時間:2024年06月26日 09:48:06   作者:栗克  
UDP協議是互聯網上使用最廣泛的傳輸協議之一,具有簡單、高效和不可靠的特點,本文主要介紹了C# UDP網絡通信的實現示例,具有一定的參考價值,感興趣的可以了解一下

TCP和UDP基本概念

TCP:(Transmission Control Protocol)是一種面向連接、可靠的、基于字節(jié)流的傳輸層通信協議。并且提供了全雙工通信,允許倆個應用直接建立一個可靠的連接以進行數據交換/UDP:(User Datagram Protocol):是一種無連接、不可靠、基于數據報文傳輸層協議,它不提供數據包的分組。排序和組裝功能也不提供可靠性的保證

TCP和UDP區(qū)別

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

2.tcp傳輸數據穩(wěn)定可靠,適用于對網絡通信質量要求高的場景,需要準確無誤發(fā)給對方 例如 傳輸文件 發(fā)送郵件 瀏覽網頁

3.udp優(yōu)點是速度快,輕量級。但是有可能會產生丟包,所以適用于實時性要求較高的但是對丟包沒有要求太高場景,例如 域名查詢 語音通話 視頻直播等

UDP協議特點

1.udp基于IP的簡單的協議,不可靠的協議

2.優(yōu)點就是簡單 輕量化 傳輸速度高、要求可靠性不太高

3.缺點:沒有流量控制,沒有應答確認機制。不能解決丟包重發(fā)錯順序問題

UDP使用場景

當應用程序對傳輸的可靠性要求不高,但是對傳輸速度和延遲要求較高時可以使用udp協議。例如語音和視頻聊天。主要在這些場景如果丟了一倆個數據包 不會產生太大的影響。

UDP服務器

控件

兩個按鈕(打開服務器按鈕,發(fā)送消息按鈕),輸入框,文本框控件(RichTextBox:顯示聊天)

打開服務器按鈕方法

創(chuàng)建全局變量 Socket

 // 先講socket進行客戶端和服務器的書寫
 Socket socket;
 private void button1_Click(object sender, EventArgs e)
 {
     //參數1 ip地址類型 ipv4的類型
     //參數2 傳遞數據類型 數據報文類型
     //參數3 協議類型 udp協議
     //1 創(chuàng)建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()
  {
      //創(chuàng)建線程 開啟線程
      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() ;
  }    

發(fā)送消息事件

//發(fā)消息的方法 給指定的人發(fā)消息
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客戶端

控件

三個按鈕(打開,發(fā)送,關閉),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創(chuàng)建客戶端對象
                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("端口號被占用");
            }

        }

        //發(fā)送消息
        private void button2_Click(object sender, EventArgs e)
        {
          
            if (socket != null)
            {
              
                //參數1 發(fā)送的字符串轉成字節(jié)數組
                //參數2 發(fā)送數據的遠程終端 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網絡通信內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家! 

相關文章

  • C#詞法分析器之輸入緩沖和代碼定位的應用分析

    C#詞法分析器之輸入緩沖和代碼定位的應用分析

    本篇文章介紹了,C#詞法分析器之輸入緩沖和代碼定位的應用分析。需要的朋友參考下
    2013-05-05
  • 深入C# 內存管理以及優(yōu)化的方法詳解

    深入C# 內存管理以及優(yōu)化的方法詳解

    本篇文章是對C#中內存管理以及優(yōu)化的方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C#使用Lazy實現延遲加載的方法示例

    C#使用Lazy實現延遲加載的方法示例

    在C#中,Lazy< T> 類是一個非常有用的工具,它可以用于延遲加載值,在本文中,我們將詳細介紹 Lazy< T> 的實現機制和用法,并提供一些示例來展示它的優(yōu)勢,文中通過代碼示例講解的非常詳細,需要的朋友可以參考下
    2024-06-06
  • C#使用命名管道Pipe進行進程通信實例詳解

    C#使用命名管道Pipe進行進程通信實例詳解

    這篇文章主要介紹了C#使用命名管道Pipe進行進程通信實例詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • 輕松學習C#的基礎入門

    輕松學習C#的基礎入門

    輕松學習C#的基礎入門,了解C#最基本的知識點,C#是一種簡潔的,類型安全的一種完全面向對象的開發(fā)語言,是Microsoft專門基于.NET Framework平臺開發(fā)的而量身定做的高級程序設計語言,需要的朋友可以參考下
    2015-11-11
  • c#解壓文件的實例方法

    c#解壓文件的實例方法

    該方法適應應用桌面快捷鍵壓縮的文件,zip,rar格式的文件進行解壓!
    2013-05-05
  • C#筆記之EF Code First 數據模型 數據遷移

    C#筆記之EF Code First 數據模型 數據遷移

    EF 中 Code First 的數據遷移網上有很多資料,我這份并沒什么特別。Code First 創(chuàng)建視圖網上也有很多資料,但好像很麻煩,而且親測好像是無效的方法(可能是我太笨,沒搞成功),我摸索出了一種簡單有效的方法,這里分享給大家
    2021-09-09
  • C#禁止textbox復制、粘貼、剪切及鼠標右鍵的方法

    C#禁止textbox復制、粘貼、剪切及鼠標右鍵的方法

    這篇文章主要介紹了C#禁止textbox復制、粘貼、剪切及鼠標右鍵的方法,涉及C#針對窗口消息的處理技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-09-09
  • C#實現獲取系統(tǒng)目錄并以Tree樹叉顯示的方法

    C#實現獲取系統(tǒng)目錄并以Tree樹叉顯示的方法

    這篇文章主要介紹了C#實現獲取系統(tǒng)目錄并以Tree樹叉顯示的方法,可以加深讀者對于C#下數據結構實現方法的認識,需要的朋友可以參考下
    2014-07-07
  • C#根據前臺傳入實體名稱實現動態(tài)查詢數據

    C#根據前臺傳入實體名稱實現動態(tài)查詢數據

    這篇文章主要為大家詳細介紹了C#如何根據前臺傳入實體名稱實現動態(tài)查詢數據的功能,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2023-04-04

最新評論