UDP网络程序实例
根据前面所讲的网络编程的基础知识,以及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网络程序实例的更多相关文章
- udp网络程序-发送、接收数据
1. udp网络程序-发送数据 创建一个基于udp的网络程序流程很简单,具体步骤如下: 创建客户端套接字 发送/接收数据 关闭套接字 代码如下: #coding=utf-8from socket im ...
- UDP网络程序模型设计
UDP网络程序设计 1. UDP网络编程模型程序初始化 1.1服务器使用的函数 创建socket----->socket 绑定地址-------->bind 接受数据--------> ...
- UDP网络程序,客户端和服务端交互原理
创建一个udp客户端程序的流程是简单,具体步骤如下: 创建客户端套接字 发送/接收数据 关闭套接字 UDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实 ...
- 使用 acl 编写 UDP 网络程序(UDP 重传及可靠性机制)
在当今网络世界,虽然大部分网络应用都是基于 TCP 的,但有时 UDP 的网络通信也有用武之处.acl 的网络库中不仅提供了基于 TCP 的网络套接字流,同时也提供了 UDP 的网络库(目前 acl ...
- TCP网络程序实例——服务器端与客户端交互
实例02 客户端/服务器的交互 实例位置:光盘\Code\SL\14\02 视频位置:光盘\Video\14\ ◆ 服务器端 创建服务器端项目Server,在Main方法中创建TCP连接对象:然后监听 ...
- UDP 网络程序-发送_接收数据
""" 创建udp连接 发送数据给 """ from socket import * # 创建udp套接字,使用SOCK_DGRAM udp ...
- VC++ UDP网络控制台程序
采用的是VC2008,控制台应用程序,使用UDP编写. 1.服务端代码 //UDPServer.cpp #include <WinSock2.h> #include <stdio. ...
- TCP、UDP服务器模型 在网络程序里面,通常都是一
TCP.UDP服务器模型 在网络程序里面,通常都是一个服务器处理多个客户机,为了出个多个客户机的请求,服务器端的程序有不同的处理方式. 目前最常用的服务器模型: 循环服务器:循环服务器在同一时刻只能响 ...
- [C# 网络编程系列]专题七:UDP编程补充——UDP广播程序的实现
转自:http://www.cnblogs.com/zhili/archive/2012/09/03/2666974.html 上次因为时间的关系,所以把上一个专题遗留下的一个问题在本专题中和大家分享 ...
随机推荐
- [luoguP2031] 脑力达人之分割字串(DP)
传送门 想了个4次方算法,没想到也A了,数据真是水. 其实两个字符串匹配那部分可以用kmp优化 ——代码 #include <cstdio> #include <cstring> ...
- noip模拟赛 whzzt-Warmth
分析:这道题难度和天天爱跑步差不了多少啊......裸的暴力只有10分,最好大的还是那个5%的数据,不过这也才15分,比天天爱跑步的暴力分不知道少到哪里去了. 正解是dp,毕竟要求方案数嘛,但是这个d ...
- hdu 2647拓扑排序 容器
#include<stdio.h> #include<queue> #include<vector> #include<iostream> using ...
- java操作数据库的工具库(from韩顺平)
需要引入jar包sqljdbc4.jar 其他关系型数据库只需要改动前面的连接过程,其他的一样 package com.cx.util; import java.io.FileInputStream; ...
- 解决使用myeclipse电脑卡的问题
1. 原因:myeclipse会自动更新,因此会占用大量内存 2. 解决方法: (1)window->Perferences->General->Startup and Shutdo ...
- python_swift_project_swift使用
1. swift的存取用curl命令. 我们先把pub url 和token保存起来 root@A071103070098:~# export pubURL=http://10.194.148.102 ...
- ASPNET Razor 使用 @Ajax.BeginForm 需要注意到的细节
创建空的web项目,通过Nuget引用mvc组件来搭建空的MVC项目时, 在视图页面中无法使用@Ajax.BegForm来进行异步提交数据, 而新建默认的MVC模板项目却能够正常使用@Ajax.Beg ...
- Manthan, Codefest 16 C
建trie树,刚好字符串是反向的,直接在原图上向前搜索就OK了……………… 可怜的我竟然用了RK来hash,在test67那里T了…… 贴个RK的 #include <iostream> ...
- 基于Volley,Gson封装支持JWT无状态安全验证和数据防篡改的GsonRequest网络请求类
这段时间做新的Android项目的client和和REST API通讯框架架构设计.使用了非常多新技术,终于的方案也相当简洁优雅.client仅仅须要传Java对象,server端返回json字符串, ...
- JAVA高速开发平台 - 开源 免费 - JEECG
JEECG 微云高速开发平台 当前最新版本号: 3.6.2(公布日期:20160315) 下载地址:http://git.oschina.net/jeecg/jeecg 前言: 随着 WEB UI 框 ...