最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C# UDP網(wǎng)絡(luò)通信的實(shí)現(xiàn)示例

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

TCP和UDP基本概念

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

TCP和UDP區(qū)別

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

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

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

UDP協(xié)議特點(diǎn)

1.udp基于IP的簡單的協(xié)議,不可靠的協(xié)議

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

3.缺點(diǎn):沒有流量控制,沒有應(yīng)答確認(rèn)機(jī)制。不能解決丟包重發(fā)錯(cuò)順序問題

UDP使用場景

當(dāng)應(yīng)用程序?qū)鬏數(shù)目煽啃砸蟛桓?,但是對傳輸速度和延遲要求較高時(shí)可以使用udp協(xié)議。例如語音和視頻聊天。主要在這些場景如果丟了一倆個(gè)數(shù)據(jù)包 不會產(chǎn)生太大的影響。

UDP服務(wù)器

控件

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

打開服務(wù)器按鈕方法

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

 // 先講socket進(jìn)行客戶端和服務(wù)器的書寫
 Socket socket;
 private void button1_Click(object sender, EventArgs e)
 {
     //參數(shù)1 ip地址類型 ipv4的類型
     //參數(shù)2 傳遞數(shù)據(jù)類型 數(shù)據(jù)報(bào)文類型
     //參數(shù)3 協(xié)議類型 udp協(xié)議
     //1 創(chuàng)建socket套接字作為服務(wù)器對象
     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); //接受數(shù)據(jù)
              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客戶端

控件

三個(gè)按鈕(打開,發(fā)送,關(guān)閉),RichTextBox(顯示聊天)

        public Form1()
        {
            InitializeComponent();
            
        }
        void f1()
        {
            byte[] body = new byte[1024];
            while (true)
            {
                int count = socket.Receive(body); //接受數(shù)據(jù)
                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 如果前后端寫的端口一致的時(shí)候 出現(xiàn)錯(cuò)誤,端口號只能使用一次
                //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)
            {
              
                //參數(shù)1 發(fā)送的字符串轉(zhuǎn)成字節(jié)數(shù)組
                //參數(shù)2 發(fā)送數(shù)據(jù)的遠(yuǎn)程終端 new IPEndPoint(IPAddress.Parse("192.168.107.83"), 8081)
                socket.SendTo(Encoding.UTF8.GetBytes("倒反天罡"), new IPEndPoint(IPAddress.Parse("192.168.107.83"), 8081));
           }
        }

        //關(guān)閉
        private void button3_Click(object sender, EventArgs e)
        {
            socket.Close();//關(guān)閉
            socket = null;
        }

到此這篇關(guān)于C# UDP網(wǎng)絡(luò)通信的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)C# UDP網(wǎng)絡(luò)通信內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • 輕松學(xué)習(xí)C#的屬性

    輕松學(xué)習(xí)C#的屬性

    輕松學(xué)習(xí)C#的屬性,對C#的屬性感興趣的朋友可以參考本篇文章,幫助大家更靈活的運(yùn)用C#的屬性
    2015-11-11
  • C#操作SQLite實(shí)現(xiàn)數(shù)據(jù)的增刪改查

    C#操作SQLite實(shí)現(xiàn)數(shù)據(jù)的增刪改查

    SQLite是一個(gè)輕量級、跨平臺的關(guān)系型數(shù)據(jù)庫,在小型項(xiàng)目中,方便,易用,同時(shí)支持多種開發(fā)語言。本文將用C#語言對SQLite 的一個(gè)封裝,實(shí)現(xiàn)數(shù)據(jù)的增刪改查。需要的可以參考一下
    2022-01-01
  • C#禁用雙擊窗體圖標(biāo)關(guān)閉窗體的方法

    C#禁用雙擊窗體圖標(biāo)關(guān)閉窗體的方法

    這篇文章主要介紹了C#禁用雙擊窗體圖標(biāo)關(guān)閉窗體的方法,通過對窗體參數(shù)的簡單設(shè)置實(shí)現(xiàn)C#禁用雙擊窗體圖標(biāo)關(guān)閉窗體的功能,非常簡單實(shí)用,需要的朋友可以參考下
    2015-08-08
  • C#中 paint()與Onpaint()的區(qū)別

    C#中 paint()與Onpaint()的區(qū)別

    paint是事件onpaint方法onpaint方法是調(diào)用paint事件的,用哪一個(gè),效果是一樣,就看那一個(gè)方便了內(nèi)部是這樣實(shí)現(xiàn)的:
    2013-04-04
  • C# Memcached緩存用法實(shí)例詳解

    C# Memcached緩存用法實(shí)例詳解

    這篇文章主要介紹了C#中Memcached緩存用法,以實(shí)例形式詳細(xì)講述了在C#中針對Memcached緩存的各種操作,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-10-10
  • C#中?、?.、??、??=運(yùn)算符的用法

    C#中?、?.、??、??=運(yùn)算符的用法

    本文主要介紹了C#中?、?.、??、??=運(yùn)算符的用法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 操作xml,將xml數(shù)據(jù)顯示到treeview的C#代碼

    操作xml,將xml數(shù)據(jù)顯示到treeview的C#代碼

    這篇文章主要介紹了操作xml,將xml數(shù)據(jù)顯示到treeview的C#代碼,有需要的朋友可以參考一下
    2013-11-11
  • C# 中的List.Sort()--集合排序方法全面解析

    C# 中的List.Sort()--集合排序方法全面解析

    這篇文章主要介紹了C# 中的List.Sort()--集合排序方法全面解析,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • C#RSA對接JAVA中RSA方式代碼實(shí)例

    C#RSA對接JAVA中RSA方式代碼實(shí)例

    在本篇文章中小編給各位整理的是關(guān)于C#RSA對接JAVA中RSA方式代碼實(shí)例,有需要的朋友們可以參考一下。
    2019-09-09
  • 利用C#實(shí)現(xiàn)在Word中更改字體顏色

    利用C#實(shí)現(xiàn)在Word中更改字體顏色

    在日常工作中,我們有時(shí)會需要修改字體的顏色來突出文本重點(diǎn),讓讀者更容易抓住文章要點(diǎn)。在今天這篇文章中,我將為大家介紹如何以編程方式,在Word更改字體顏色,感興趣的可以了解一下
    2023-02-02

最新評論

高雄市| 界首市| 莱州市| 龙州县| 迁西县| 静乐县| 商都县| 新巴尔虎右旗| 蒙自县| 和平县| 滁州市| 嘉义县| 扶风县| 桓台县| 常熟市| 五家渠市| 调兵山市| 芷江| 咸宁市| 林口县| 巩留县| 调兵山市| 腾冲县| 杨浦区| 贵德县| 宜黄县| 万全县| 嵩明县| 滦平县| 金华市| 五家渠市| 绥芬河市| 万安县| 牟定县| 花莲市| 沁阳市| 增城市| 英吉沙县| 达尔| 巴里| 临漳县|