zoukankan      html  css  js  c++  java
  • 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所示。

    图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 = "正在接收的信息:
    " + str; //显示正在接收的数据
    
    32                           textBox1.Text += "
    " + 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所示。

     

    图14.16  接收广播程序的运行结果

    本文来自明日科技出版的《零基础学C#,转载请注明出处!!!

  • 相关阅读:
    CentOS7 64位下MySQL5.7安装与配置(YUM)
    在windows 7中vagrant up 无反应,没任何信息输出
    vagrant在windows下的安装和配置
    html中嵌入flvplayer.swf播放器,播放视频
    FileItem 出现部分中文乱码解决办法
    华为P6-C00电信版,刷机总是失败? FAIL
    MyEclipse发布按钮无效的办法
    Ubuntu 下建立WiFi热点的方法
    Android系统源码学习步骤
    android源代码在线阅读
  • 原文地址:https://www.cnblogs.com/mrxy/p/8295134.html
Copyright © 2011-2022 走看看