根据前面所讲的网络编程的基础知识,以及UDP网络编程的特点,下面创建一个广播数据报程序。广播数据报是一种较新的技术,类似于电台广播,广播电台需要在指定的波段和频率上广播信息,收听者也要将收音机调到指定的波段、频率才可以收听广播内容。

本实例要求主机不断地重复播出节目预报,这样可以保证加入到同一组的主机随时接收到广播信息。接收者将正在接收的信息放在一个文本框中,并将接收的全部信息放在另一个文本框中。

(1)创建广播主机项目Server(控制台应用程序),在Main方法中创建UDP连接;然后通过UDP连接不断向外发送广播信息。代码如下:

   namespace Server

   {

       class Program

       {

           static UdpClientudp = new UdpClient();//创建UdpClient对象

           static void Main(string[] args)

           {

               //调用UdpClient对象的Connect方法建立默认远程主机

   udp.Connect("127.0.0.1", );

               while (true)

               {

                   Thread thread = new Thread(() =>

                   {

                       while (true)

                       {

                           try

                           {

                               //定义一个字节数组,用来存放发送到远程主机的信息

                               Byte[] sendBytes = Encoding.Default.GetBytes("(" + DateTime.Now.ToLongTimeString() + ")节目预报:八点有大型晚会,请收听");

   Console.WriteLine("(" + DateTime.Now.ToLongTimeString() + ")节目预报:八点有大型晚会,请收听");

                               //调用UdpClient对象的Send方法将UDP数据报发送到远程主机

   udp.Send(sendBytes, sendBytes.Length);

   Thread.Sleep();             //线程休眠2秒

                           }

                           catch (Exception ex)

                           {

   Console.WriteLine(ex.Message);

                           }

                       }

                   });

   thread.Start();                             //启动线程

               }

           }

       }

   }

说明:上面代码实现时用到了Thread类,该类表示线程类,其详细使用请参见本书第15章。程序运行结果如图14.15所示。

图14.15  广播主机程序的运行结果

(2)创建接收广播项目Client(Windows窗体应用程序),在默认窗体中添加两个Button控件和两个TextBox控件,并且将两个TextBox控件设置为多行文本框。单击“开始接收”按钮,系统开始接收主机播出的信息;单击“停止接收”按钮,系统会停止接收广播主机播出的信息。代码如下:

   namespace Client

   {

       public partial class Form1 : Form

       {

           public Form1()

           {

   InitializeComponent();

   CheckForIllegalCrossThreadCalls = false; //在其他线程中可以调用主窗体控件

           }

   bool flag = true; //标识是否接收数据

   UdpClientudp; //创建UdpClient对象

           Thread thread; //创建线程对象

           private void button1_Click(object sender, EventArgs e)

           {

   udp = new UdpClient(); //使用端口号创建UDP连接对象

               flag = true; //标识接收数据

               //创建IPEndPoint对象,用来显示响应主机的标识

   IPEndPointipendpoint = new IPEndPoint(IPAddress.Any, );

               thread = new Thread(() => //新开线程,执行接收数据操作

               {

                   while(flag) //如果标识为true

                   {

                       try

                       {

                           if (udp.Available<= ) continue; //判断是否有网络数据

                           if (udp.Client == null) return;   //判断连接是否为空

                           //调用UdpClient对象的Receive方法获得从远程主机返回的UDP数据报

   byte[] bytes = udp.Receive(ref ipendpoint);

                           //将获得的UDP数据报转换为字符串形式

                           string str = Encoding.Default.GetString(bytes);

                           textBox2.Text = "正在接收的信息:\n" + str; //显示正在接收的数据

                           textBox1.Text += "\n" + str; //显示接收的所有数据

                       }

                       catch (Exception ex)

                       {

   MessageBox.Show(ex.Message); //错误提示

                       }

   Thread.Sleep(); //线程休眠2秒

                   }

               });

   thread.Start();//启动线程

           }

           private void button2_Click(object sender, EventArgs e)

           {

               flag = false; //标识不接收数据

               if (thread.ThreadState == ThreadState.Running)   //判断线程是否运行

   thread.Abort();//终止线程

   udp.Close();//关闭连接

           }

       }

   }

程序运行结果如图14.16所示。

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

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

UDP网络程序实例的更多相关文章

  1. udp网络程序-发送、接收数据

    1. udp网络程序-发送数据 创建一个基于udp的网络程序流程很简单,具体步骤如下: 创建客户端套接字 发送/接收数据 关闭套接字 代码如下: #coding=utf-8from socket im ...

  2. UDP网络程序模型设计

    UDP网络程序设计 1. UDP网络编程模型程序初始化 1.1服务器使用的函数 创建socket----->socket 绑定地址-------->bind 接受数据--------> ...

  3. UDP网络程序,客户端和服务端交互原理

    创建一个udp客户端程序的流程是简单,具体步骤如下: 创建客户端套接字 发送/接收数据 关闭套接字 UDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实 ...

  4. 使用 acl 编写 UDP 网络程序(UDP 重传及可靠性机制)

    在当今网络世界,虽然大部分网络应用都是基于 TCP 的,但有时 UDP 的网络通信也有用武之处.acl 的网络库中不仅提供了基于 TCP 的网络套接字流,同时也提供了 UDP 的网络库(目前 acl ...

  5. TCP网络程序实例——服务器端与客户端交互

    实例02 客户端/服务器的交互 实例位置:光盘\Code\SL\14\02 视频位置:光盘\Video\14\ ◆ 服务器端 创建服务器端项目Server,在Main方法中创建TCP连接对象:然后监听 ...

  6. UDP 网络程序-发送_接收数据

    """ 创建udp连接 发送数据给 """ from socket import * # 创建udp套接字,使用SOCK_DGRAM udp ...

  7. VC++ UDP网络控制台程序

     采用的是VC2008,控制台应用程序,使用UDP编写. 1.服务端代码 //UDPServer.cpp #include <WinSock2.h> #include <stdio. ...

  8. TCP、UDP服务器模型 在网络程序里面,通常都是一

    TCP.UDP服务器模型 在网络程序里面,通常都是一个服务器处理多个客户机,为了出个多个客户机的请求,服务器端的程序有不同的处理方式. 目前最常用的服务器模型: 循环服务器:循环服务器在同一时刻只能响 ...

  9. [C# 网络编程系列]专题七:UDP编程补充——UDP广播程序的实现

    转自:http://www.cnblogs.com/zhili/archive/2012/09/03/2666974.html 上次因为时间的关系,所以把上一个专题遗留下的一个问题在本专题中和大家分享 ...

随机推荐

  1. HDU 482 String

    String Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HDU. Original ID: 482 ...

  2. jquery动态为个span,input,div,等标签赋值的方法总结,js动态隐藏div

    1.jquery为span和div标签赋值. <span id="span1"></span> <div id="div1"> ...

  3. P - FatMouse and Cheese 记忆化搜索

    FatMouse has stored some cheese in a city. The city can be considered as a square grid of dimension ...

  4. 武大OJ 613. Count in Sama’s triangle

    Description Today, the math teacher taught Alice Hui Yang’s triangle. However, the teacher came up w ...

  5. Unix stat

    Linux 下有stat命令,可以非常方便的得到一个文件的inode等信息.但是今天在Solaris下使用stat居然没有这个命令.不过没关系,我们可以自己写这个命令,比如: #include < ...

  6. Python3基础(七) I/O操作

    一个程序可以从键盘读取输入,也可以从文件读取输入:而程序的结果可以输出到屏幕上,也可以保存到文件中便于以后使用.本文介绍Python中最基本的I/O函数. 一.控制台I/O 读取键盘输入 内置函数in ...

  7. oc 和swift混编的时候打包ipa安装不了

    做了一个oc项目.里面实用到swift第三方,真机执行的时候是正常的,用企业级证书打包成ipa之后安装完毕之后闪退.通过导出手机log日志发现错误提示: Dyld Error Message:   L ...

  8. linux驱动之LED驱动_1

    步骤: 1.框架 2.完好硬件的操作: a.看原理图.引脚 b.看2440手冊 c.写代码: IO口须要用ioremap映射 我的板子电路例如以下所看到的 1.配置GPBCON 寄存器,配置输出   ...

  9. HDU - 3631 Shortest Path(Floyd最短路)

    Shortest Path Time Limit: 1000MS Memory Limit: 32768KB 64bit IO Format: %I64d & %I64u SubmitStat ...

  10. android学习笔记:adb更换端口后成功启动

    搭建手机开发环境,android ADT,android SDK,然后按照PhoneGap官网的指引,拷贝文件,修改代码,运行,进度条到了某个位置后就停止不动了. 停止不动,又是停止不动.你都不知道问 ...