UDP网络程序实例
admin
2023-07-28 09:20:07
0次

根据前面所讲的网络编程的基础知识,以及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 接收广播程序的运行结果

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...