UDP網絡程序實例

根據前面所講的網絡編程的基礎知識,以及UDP網絡編程的特點,下面創建一個廣播數據報程序。廣播數據報是一種較新的技術,類似於電臺廣播,廣播電臺需要在指定的波段和頻率上廣播信息,收聽者也要將收音機調到指定的波段、頻率纔可以收聽廣播內容。
本實例要求主機不斷地重複播出節目預報,這樣可以保證加入到同一組的主機隨時接收到廣播信息。接收者將正在接收的信息放在一個文本框中,並將接收的全部信息放在另一個文本框中。
(1)創建廣播主機項目Server(控制檯應用程序),在Main方法中創建UDP連接;然後通過UDP連接不斷向外發送廣播信息。代碼如下:

01  namespace Server
02  {
03      class Program
04      {
05          static UdpClientudp = new UdpClient();//創建UdpClient對象
06          static void Main(string[] args)
07          {
08              //調用UdpClient對象的Connect方法建立默認遠程主機
09  udp.Connect("127.0.0.1", 888);
10              while (true)
11              {
12                  Thread thread = new Thread(() =>
13                  {
14                      while (true)
15                      {
16                          try
17                          {
18  
19                              //定義一個字節數組,用來存放發送到遠程主機的信息
20                              Byte[] sendBytes = Encoding.Default.GetBytes("(" + DateTime.Now.ToLongTimeString() + ")節目預報:八點有大型晚會,請收聽");
21  Console.WriteLine("(" + DateTime.Now.ToLongTimeString() + ")節目預報:八點有大型晚會,請收聽");
22                              //調用UdpClient對象的Send方法將UDP數據報發送到遠程主機
23  udp.Send(sendBytes, sendBytes.Length);
24  Thread.Sleep(2000);             //線程休眠2秒
25                          }
26                          catch (Exception ex)
27                          {
28  Console.WriteLine(ex.Message);
29                          }
30                      }
31                  });
32  thread.Start();                             //啓動線程
33              }
34          }
35      }
36  }

說明:上面代碼實現時用到了Thread類,該類表示線程類,其詳細使用請參見本書第15章。程序運行結果如圖14.15所示。
UDP網絡程序實例
圖14.15 廣播主機程序的運行結果
(2)創建接收廣播項目Client(Windows窗體應用程序),在默認窗體中添加兩個Button控件和兩個TextBox控件,並且將兩個TextBox控件設置爲多行文本框。單擊“開始接收”按鈕,系統開始接收主機播出的信息;單擊“停止接收”按鈕,系統會停止接收廣播主機播出的信息。代碼如下:

01  namespace Client
02  {
03      public partial class Form1 : Form
04      {
05          public Form1()
06          {
07  InitializeComponent();
08  CheckForIllegalCrossThreadCalls = false; //在其他線程中可以調用主窗體控件
09          }
10  bool flag = true; //標識是否接收數據
11  UdpClientudp; //創建UdpClient對象
12          Thread thread; //創建線程對象
13          private void button1_Click(object sender, EventArgs e)
14          {
15  udp = new UdpClient(888); //使用端口號創建UDP連接對象
16              flag = true; //標識接收數據
17              //創建IPEndPoint對象,用來顯示響應主機的標識
18  IPEndPointipendpoint = new IPEndPoint(IPAddress.Any, 888);
19              thread = new Thread(() => //新開線程,執行接收數據操作
20              {
21                  while(flag) //如果標識爲true
22                  {
23                      try
24                      {
25                          if (udp.Available<= 0) continue; //判斷是否有網絡數據
26                          if (udp.Client == null) return;   //判斷連接是否爲空
27                          //調用UdpClient對象的Receive方法獲得從遠程主機返回的UDP數據報
28  byte[] bytes = udp.Receive(ref ipendpoint);
29                          //將獲得的UDP數據報轉換爲字符串形式
30                          string str = Encoding.Default.GetString(bytes);
31                          textBox2.Text = "正在接收的信息:\n" + str; //顯示正在接收的數據
32                          textBox1.Text += "\n" + str; //顯示接收的所有數據
33                      }
34                      catch (Exception ex)
35                      {
36  MessageBox.Show(ex.Message); //錯誤提示
37                      }
38  Thread.Sleep(2000); //線程休眠2秒
39                  }
40              });
41  thread.Start();//啓動線程
42          }
44          private void button2_Click(object sender, EventArgs e)
45          {
46              flag = false; //標識不接收數據
47              if (thread.ThreadState == ThreadState.Running)   //判斷線程是否運行
48  thread.Abort();//終止線程
49  udp.Close();//關閉連接
50          }
51      }
52  }

程序運行結果如圖14.16所示。
UDP網絡程序實例
圖14.16 接收廣播程序的運行結果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章