国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C#網(wǎng)絡(luò)編程UDP程序設(shè)計(UdpClient類)

這篇具有很好參考價值的文章主要介紹了C#網(wǎng)絡(luò)編程UDP程序設(shè)計(UdpClient類)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

一、UdpClient類?

二、示例

1.源碼

(1)Client

(2)Server

2.生成

(1)先啟動服務(wù)器,發(fā)送廣播信息

(2)再開啟客戶端接聽


???????UDP是user datagram protocol的簡稱,中文名是用戶數(shù)據(jù)報協(xié)議,它是網(wǎng)絡(luò)信息傳輸?shù)牧硪环N形式。UDP通信和TCP通信不同,基于UDP的信息傳遞更快,但不提供可靠的保證。使用UDP傳遞數(shù)據(jù)時,用戶無法知道數(shù)據(jù)能否正確地到達(dá)主機(jī),也不能確定到達(dá)目的地的順序是否和發(fā)送的順序相同。

????????雖然UDP是一種不可靠的協(xié)議,但如果需要較快地傳輸信息,并能容忍小的錯誤,可以考慮使用UDP。基于UDP通信的基本模式如下

  • 將數(shù)據(jù)打包(稱為數(shù)據(jù)包),然后將數(shù)據(jù)包發(fā)往目的地。
  • 接收別人發(fā)來的數(shù)據(jù)包,然后查看數(shù)據(jù)包。

????????在C#中,UdpClient類用于在阻止同步模式下發(fā)送和接收無連接UDP數(shù)據(jù)報。因為UDP是無連傳輸協(xié)議,所以不需要在發(fā)送和接收數(shù)據(jù)前建立遠(yuǎn)程主機(jī)連接,但可以選擇使用下面兩種方法之一建立默認(rèn)遠(yuǎn)程主機(jī)。

  • 使用遠(yuǎn)程主機(jī)名和端口號作為參數(shù)創(chuàng)建UdpClient類的實例。
  • 創(chuàng)建UdpClient類的實例,然后調(diào)用Connect方法。? ?

一、UdpClient類?

????????UdpClient類的常用屬性、方法及說明如表:

屬性及方法 說明
Available屬性 獲取從網(wǎng)絡(luò)接收的可讀取的數(shù)據(jù)量
Client屬性 獲取或設(shè)置基礎(chǔ)網(wǎng)絡(luò)Socket
BeginReceive方法 從遠(yuǎn)程主機(jī)異步接收數(shù)據(jù)報
BeginSend方法 將數(shù)據(jù)報異步發(fā)送到遠(yuǎn)程主機(jī)
Close方法 關(guān)閉UDP連接
Connect方法 建立默認(rèn)遠(yuǎn)程主機(jī)
EndReceive方法 結(jié)束掛起的異步接收
EndSend方法 結(jié)束掛起的異步發(fā)送
Receive方法 返回已由遠(yuǎn)程主機(jī)發(fā)送的UDP數(shù)據(jù)報
Send方法 將UDP數(shù)據(jù)報發(fā)送到遠(yuǎn)程主機(jī)
EnableBroadcast屬性 是否接收或發(fā)送廣播
Active屬性 獲取或者設(shè)置一個值指示是否已建立默認(rèn)遠(yuǎn)程主機(jī)
JoinMulticastGroup方法 將UdpClient添加到多路廣播組
DropMulticastGroup方法 將UdpClient退出多路廣播組

二、示例

????????本實例要求主機(jī)不斷地重復(fù)播出節(jié)目預(yù)報,這樣可以保證加入到同一組的主機(jī)隨時接收到廣播信 。接收者將正在接收的信息放在一個文本框中,并將接收的全部信息放在另一個文本框中。

1.源碼

(1)Client

// Client
// 創(chuàng)建接收廣播項目Clent(Windows窗體應(yīng)用程序),
// 單擊“開始接收”按鈕,系統(tǒng)開始接收主機(jī)播出的信息;
// 單擊“停止接收”按鈕,系統(tǒng)會停止接收廣播主機(jī)播出的信息。
using System.Net.Sockets;
using System.Net;
using System.Text;

namespace Client
{
    public partial class Form1 : Form
    {
        private Button? button1;
        private Button? button2;
        private TextBox? textBox1;
        private TextBox? textBox2;

        public Form1()
        {
            InitializeComponent();
            Load += new EventHandler(Form1_Load);
            CheckForIllegalCrossThreadCalls = false;    //在其他線程中可以調(diào)用主窗體控件
        }

        private CancellationTokenSource? cancellationToken1;
        private bool flag = true; //定義一個bool變量,標(biāo)識是否接收數(shù)據(jù)
        private UdpClient? udp;   //創(chuàng)建UdpClient對象
        private Thread? thread;   //創(chuàng)建線程對象

        private void Form1_Load(object? sender, EventArgs e)
        {
            // 
            // button1
            // 
            button1 = new Button
            {
                BackColor = Color.Red,
                FlatStyle = FlatStyle.Flat,
                Font = new Font("宋體", 10F, FontStyle.Bold, GraphicsUnit.Point, 134),
                Location = new Point(228, 5),
                Name = "button1",
                Size = new Size(85, 32),
                TabIndex = 0,
                Text = "開始接收",
                UseVisualStyleBackColor = false
            };
            button1.FlatAppearance.BorderSize = 0;
            button1.Click += new EventHandler(Button1_Click);
            // 
            // button2
            // 
            button2 = new Button
            {
                BackColor = Color.Yellow,
                FlatStyle = FlatStyle.Flat,
                Font = new Font("宋體", 10F, FontStyle.Bold, GraphicsUnit.Point, 134),
                Location = new Point(319, 5),
                Name = "button2",
                Size = new Size(85, 32),
                TabIndex = 1,
                Text = "停止接收",
                UseVisualStyleBackColor = false
            };
            button2.FlatAppearance.BorderSize = 0;
            button2.Click += new EventHandler(Button2_Click);
            // 
            // textBox1
            // 
            textBox1 = new TextBox
            {
                Location = new Point(7, 54),
                Multiline = true,
                Name = "textBox1",
                ScrollBars = ScrollBars.Both,
                Size = new Size(311, 133),
                TabIndex = 2
            };
            // 
            // textBox2
            // 
            textBox2 = new TextBox
            {
                ForeColor = Color.Blue,
                Location = new Point(319, 54),
                Multiline = true,
                Name = "textBox2",
                ScrollBars = ScrollBars.Both,
                Size = new Size(306, 133),
                TabIndex = 3
            };
            // 
            // Form1
            // 
            AutoScaleDimensions = new SizeF(6F, 12F);
            AutoScaleMode = AutoScaleMode.Font;
            ClientSize = new Size(638, 193);
            Controls.Add(textBox2);
            Controls.Add(textBox1);
            Controls.Add(button2);
            Controls.Add(button1);
            Name = "Form1";
            StartPosition = FormStartPosition.CenterScreen;
            Text = "Client";
            
        }

        private void Button1_Click(object? sender, EventArgs e)
        {
            udp = new UdpClient(888);
            flag = true;         
            IPEndPoint ipendpoint = new(IPAddress.Any, 888);     //創(chuàng)建IPEndPoint對象,用來顯示響應(yīng)主機(jī)的標(biāo)識
            thread = new Thread(() =>                            //新開線程,執(zhí)行接收數(shù)據(jù)操作
            {
                while (flag)
                {
                    try
                    {
                        if (udp.Available <= 0) continue;         //判斷是否有網(wǎng)絡(luò)數(shù)據(jù)
                        if (udp.Client == null) return;           //判斷連接是否為空                       
                        byte[] bytes = udp.Receive(ref ipendpoint);    //調(diào)用UdpClient對象的Receive方法獲得從遠(yuǎn)程主機(jī)返回的UDP數(shù)據(jù)報                       
                        string str = Encoding.Default.GetString(bytes);//將獲得的UDP數(shù)據(jù)報轉(zhuǎn)換為字符串形式
                        textBox1!.Text = "正在接收的信息:\n" + str;    //顯示正在接收的數(shù)據(jù)
                        textBox2!.Text += "\n" + str;                  //顯示接收的所有數(shù)據(jù)
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);//錯誤提示
                    }
                    Thread.Sleep(1000);             //線程休眠1秒
                }
            });
            thread.Start();                         //啟動線程
        }

        private void Button2_Click(object? sender, EventArgs e)
        {
            cancellationToken1 = new CancellationTokenSource();
            flag = false;  //不接收數(shù)據(jù)
            if (thread!.ThreadState == ThreadState.Running) //判斷線程是否運行
                cancellationToken1.Cancel();                //關(guān)閉線程
            udp!.Close();  //關(guān)閉連接
        }
       
    }
}

(2)Server

// Server,先開Server后開Client
// 廣播數(shù)據(jù)報程序
// 創(chuàng)建廣播主機(jī)項目Server(控制臺應(yīng)用程序),在Main()方法中創(chuàng)建UDP連接;
// 然后通過UDP 不斷向外發(fā)送廣播信息。
using System.Text;
using System.Net.Sockets;

namespace Server
{
    class Program
    {
        static readonly UdpClient udp = new();// 創(chuàng)建UdpClient對象
        static void Main(string[] args)
        {          
            udp.Connect("127.0.0.1", 888);    //調(diào)用UdpClient對象的Connect方法建立默認(rèn)遠(yuǎn)程主機(jī)
            while (true)
            {
                Thread thread = new(() =>
                {
                    try
                    {
                        string str = "(" + DateTime.Now.ToLongTimeString();
                        str += ")節(jié)目預(yù)報:八點有大型晚會,請收聽"; 
                        
                        byte[] sendBytes = Encoding.Default.GetBytes(str); //定義一個字節(jié)數(shù)組,用來存放發(fā)送到遠(yuǎn)程主機(jī)的信息
                        Console.WriteLine(str);                       
                        udp.Send(sendBytes, sendBytes.Length);             //調(diào)用UdpClient對象的Send方法將UDP數(shù)據(jù)報發(fā)送到遠(yuǎn)程主機(jī)
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
                });
                thread.Start();         //啟動線程
                Thread.Sleep(1000);//線程休眠1秒
            }
        }
    }
}

2.生成

(1)先啟動服務(wù)器,發(fā)送廣播信息

?c# udpclient,C#,網(wǎng)絡(luò),c#,udp

(2)再開啟客戶端接聽

c# udpclient,C#,網(wǎng)絡(luò),c#,udp文章來源地址http://www.zghlxwxcb.cn/news/detail-852557.html

到了這里,關(guān)于C#網(wǎng)絡(luò)編程UDP程序設(shè)計(UdpClient類)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 網(wǎng)絡(luò)編程套接字(2): 簡單的UDP網(wǎng)絡(luò)程序

    網(wǎng)絡(luò)編程套接字(2): 簡單的UDP網(wǎng)絡(luò)程序

    3.1 服務(wù)端創(chuàng)建 (1) 創(chuàng)建套接字 create an endpoint for communication: 創(chuàng)建用于通信的端點 關(guān)于socket參數(shù)詳細(xì)介紹: (1) domain: 指定套接字的通信域,相當(dāng)于 struct sockaddr結(jié)構(gòu)體的前16比特位(2字節(jié)) domain的選項是以宏的形式給出的,我們直接選用即可。常用就是上面框住的兩個: AF_UNIX,本

    2024年02月10日
    瀏覽(91)
  • 網(wǎng)絡(luò)編程『socket套接字 ‖ 簡易UDP網(wǎng)絡(luò)程序』

    網(wǎng)絡(luò)編程『socket套接字 ‖ 簡易UDP網(wǎng)絡(luò)程序』

    ??個人主頁: 北 海 ??所屬專欄: Linux學(xué)習(xí)之旅、神奇的網(wǎng)絡(luò)世界 ??操作環(huán)境: CentOS 7.6 阿里云遠(yuǎn)程服務(wù)器 在當(dāng)今數(shù)字化時代,網(wǎng)絡(luò)通信作為連接世界的橋梁,成為計算機(jī)科學(xué)領(lǐng)域中至關(guān)重要的一部分。理解網(wǎng)絡(luò)編程是每一位程序員必備的技能之一,而掌握套接字編程則

    2024年02月04日
    瀏覽(103)
  • 【Linux網(wǎng)絡(luò)】網(wǎng)絡(luò)編程套接字 -- 基于socket實現(xiàn)一個簡單UDP網(wǎng)絡(luò)程序

    【Linux網(wǎng)絡(luò)】網(wǎng)絡(luò)編程套接字 -- 基于socket實現(xiàn)一個簡單UDP網(wǎng)絡(luò)程序

    我們把數(shù)據(jù)從A主機(jī)發(fā)送到B主機(jī),是目的嗎?不是,真正通信的不是這兩個機(jī)器!其實是這兩臺機(jī)器上面的軟件(人) 數(shù)據(jù)有 IP(公網(wǎng)) 標(biāo)識一臺唯一的主機(jī) ,用誰來標(biāo)識各自主機(jī)上客戶或者服務(wù)進(jìn)程的唯一性呢? 為了更好的表示一臺主機(jī)上服務(wù)進(jìn)程的唯一性,我們采用 端口號

    2024年02月12日
    瀏覽(848)
  • 【探索Linux】P.28(網(wǎng)絡(luò)編程套接字 —— 簡單的UDP網(wǎng)絡(luò)程序模擬實現(xiàn))

    【探索Linux】P.28(網(wǎng)絡(luò)編程套接字 —— 簡單的UDP網(wǎng)絡(luò)程序模擬實現(xiàn))

    在前一篇文章中,我們詳細(xì)介紹了UDP協(xié)議和TCP協(xié)議的特點以及它們之間的異同點。 本文將延續(xù)上文內(nèi)容,重點討論簡單的UDP網(wǎng)絡(luò)程序模擬實現(xiàn) 。通過本文的學(xué)習(xí),讀者將能夠深入了解UDP協(xié)議的實際應(yīng)用,并掌握如何編寫簡單的UDP網(wǎng)絡(luò)程序。讓我們一起深入探討UDP網(wǎng)絡(luò)程序的

    2024年04月08日
    瀏覽(584)
  • 【網(wǎng)絡(luò)編程】基于UDP數(shù)據(jù)報實現(xiàn)回顯服務(wù)器/客戶端程序

    【網(wǎng)絡(luò)編程】基于UDP數(shù)據(jù)報實現(xiàn)回顯服務(wù)器/客戶端程序

    個人主頁:兜里有顆棉花糖 歡迎 點贊?? 收藏? 留言? 加關(guān)注??本文由 兜里有顆棉花糖 原創(chuàng) 收錄于專欄【網(wǎng)絡(luò)編程】【Java系列】 本專欄旨在分享學(xué)習(xí)網(wǎng)絡(luò)編程的一點學(xué)習(xí)心得,歡迎大家在評論區(qū)交流討論?? 前言 我們?nèi)绻胱寫?yīng)用程序進(jìn)行網(wǎng)絡(luò)通信的話,就需要調(diào)用傳

    2024年02月04日
    瀏覽(28)
  • 網(wǎng)絡(luò)編程——UDP編程

    網(wǎng)絡(luò)編程——UDP編程

    在C語言中進(jìn)行UDP編程的一般步驟如下: (1) 包含頭文件 : 在代碼中包含必要的頭文件,以便使用UDP編程所需的函數(shù)和數(shù)據(jù)類型。通常情況下,你需要包含 sys/socket.h、netinet/in.h 和 arpa/inet.h。 (2) 創(chuàng)建套接字 : 使用 socket() 函數(shù)創(chuàng)建一個套接字,該套接字將用于網(wǎng)絡(luò)通信

    2024年02月05日
    瀏覽(21)
  • Linux網(wǎng)絡(luò)編程——UDP編程

    Linux網(wǎng)絡(luò)編程——UDP編程

    1、UDP通信協(xié)議,服務(wù)器端和客戶端無需建立連接,只需要知道對方套接字的地址信息就可以發(fā)送數(shù)據(jù) 2、UDP通信流程圖: 功能:創(chuàng)建套接字并返回套接字描述符 功能:將套接字與IP地址和端口號綁定 功能:發(fā)送數(shù)據(jù) 功能:接收數(shù)據(jù) 功能:關(guān)閉套接字 1、代碼功能:兩個進(jìn)程

    2023年04月19日
    瀏覽(24)
  • 網(wǎng)絡(luò)編程 p5 UDP編程

    網(wǎng)絡(luò)編程 p5 UDP編程

    基本介紹 類DatagramSocket和DatagramPacket實現(xiàn)了基于UDP協(xié)議網(wǎng)絡(luò)程序。 UDP數(shù)據(jù)報通過數(shù)據(jù)報套接字DatagramSocket發(fā)送和接收,系統(tǒng)不保證UDP數(shù)據(jù)報一定能夠安全送到目的地,也不能確定什么時候可以抵達(dá)。 DatagramPacket對象封裝了UDP數(shù)據(jù)報, 在數(shù)據(jù)報中包含了發(fā)送端的IP地址和端口號

    2024年02月16日
    瀏覽(23)
  • 【C++】6.網(wǎng)絡(luò)編程:網(wǎng)絡(luò)編程(TCP&UDP)

    【C++】6.網(wǎng)絡(luò)編程:網(wǎng)絡(luò)編程(TCP&UDP)

    網(wǎng)絡(luò)編程是C++ API操作中很重要的一部分,包含 TCP 和 UDP 。 網(wǎng)絡(luò)傳輸模型可以抽象為7個層: 物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層、會話層、表示層、應(yīng)用層 。 但在使用TCP/IP協(xié)議時,可以簡化為這4層: 網(wǎng)絡(luò)接口、網(wǎng)絡(luò)層、傳輸層、應(yīng)用層 。 TCP:可靠傳輸,三次握手建立

    2024年02月16日
    瀏覽(28)
  • 網(wǎng)絡(luò)原理(三)—— UDP網(wǎng)絡(luò)編程

    網(wǎng)絡(luò)原理(三)—— UDP網(wǎng)絡(luò)編程

    概念 :Socket 套接字,是由操作系統(tǒng)提供用于網(wǎng)絡(luò)通信的技術(shù),是基于TCP/IP協(xié)議的網(wǎng)絡(luò)通信的基本操作單元?;赟ocket 套借字的網(wǎng)絡(luò)程序開發(fā)就是網(wǎng)絡(luò)編程。 通俗點來說,咱們程序員在寫網(wǎng)絡(luò)程序,其實主要編寫的是應(yīng)用層代碼?。ㄒ驗榈讓拥哪男┠銊硬涣耍哺淖儾涣耍┮?/p>

    2024年01月19日
    瀏覽(16)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包